Home | Trees | Indices | Help |
|
---|
|
1 """GNUmed generic contact related widgets.""" 2 #================================================================ 3 __author__ = 'karsten.hilbert@gmx.net' 4 __license__ = 'GPL v2 or later (details at http://www.gnu.org)' 5 6 # stdlib 7 import logging, sys 8 9 10 # 3rd party 11 import wx 12 13 14 # GNUmed 15 if __name__ == '__main__': 16 sys.path.insert(0, '../../') 17 18 from Gnumed.pycommon import gmPG2 19 from Gnumed.pycommon import gmTools 20 from Gnumed.pycommon import gmMatchProvider 21 from Gnumed.pycommon import gmDispatcher 22 23 from Gnumed.business import gmDemographicRecord 24 25 from Gnumed.wxpython import gmListWidgets 26 from Gnumed.wxpython import gmPhraseWheel 27 from Gnumed.wxpython import gmEditArea 28 from Gnumed.wxpython import gmGuiHelpers 29 30 31 _log = logging.getLogger('gm.ui') 32 #============================================================ 33 # communication channels related widgets 34 #============================================================36 37 if parent is None: 38 parent = wx.GetApp().GetTopWindow() 39 40 #------------------------------------------------------------ 41 def delete(channel=None): 42 return gmDemographicRecord.delete_comm_channel_type(pk_channel_type = channel['pk'])43 #------------------------------------------------------------ 44 def refresh(lctrl): 45 wx.BeginBusyCursor() 46 channel_types = gmDemographicRecord.get_comm_channel_types() 47 lctrl.set_string_items([ (ct['l10n_description'], ct['description'], ct['pk']) for ct in channel_types ]) 48 lctrl.set_data(channel_types) 49 wx.EndBusyCursor() 50 #------------------------------------------------------------ 51 msg = _('\nThis lists the communication channel types known to GNUmed.\n') 52 53 gmListWidgets.get_choices_from_list ( 54 parent = parent, 55 msg = msg, 56 caption = _('Managing communication types ...'), 57 columns = [_('Channel'), _('System type'), '#'], 58 single_selection = True, 59 #new_callback = edit, 60 #edit_callback = edit, 61 delete_callback = delete, 62 refresh_callback = refresh 63 ) 64 65 #------------------------------------------------------------6799 100 #================================================================69 70 query = u""" 71 SELECT 72 data, 73 field_label, 74 list_label 75 FROM ( 76 SELECT DISTINCT ON (field_label) 77 pk 78 AS data, 79 _(description) 80 AS field_label, 81 (_(description) || ' (' || description || ')') 82 AS list_label 83 FROM dem.enum_comm_types 84 WHERE 85 _(description) %(fragment_condition)s 86 OR 87 description %(fragment_condition)s 88 ) AS ur 89 ORDER BY 90 ur.list_label 91 """ 92 mp = gmMatchProvider.cMatchProvider_SQL2(queries=query) 93 mp.setThresholds(1, 2, 4) 94 mp.word_separators = u'[ \t]+' 95 gmPhraseWheel.cPhraseWheel.__init__(self, *args, **kwargs) 96 self.matcher = mp 97 self.SetToolTipString(_('Select the type of communications channel.')) 98 self.selection_only = True102 if parent is None: 103 parent = wx.GetApp().GetTopWindow() 104 ea = cCommChannelEditAreaPnl(parent, -1, comm_channel = comm_channel) 105 ea.channel_owner = channel_owner 106 dlg = gmEditArea.cGenericEditAreaDlg2(self, -1, edit_area = ea, single_entry = True) 107 dlg.SetTitle(_('Editing communications channel')) 108 if dlg.ShowModal() == wx.ID_OK: 109 return True 110 return False111 #------------------------------------------------------------ 112 from Gnumed.wxGladeWidgets import wxgCommChannelEditAreaPnl 113114 -class cCommChannelEditAreaPnl(wxgCommChannelEditAreaPnl.wxgCommChannelEditAreaPnl, gmEditArea.cGenericEditAreaMixin):115 """An edit area for editing/creating a comms channel. 116 117 Does NOT act on/listen to the current patient. 118 """214 #------------------------------------------------------------120 try: 121 data = kwargs['comm_channel'] 122 del kwargs['comm_channel'] 123 except KeyError: 124 data = None 125 126 self.channel_owner = None 127 128 wxgCommChannelEditAreaPnl.wxgCommChannelEditAreaPnl.__init__(self, *args, **kwargs) 129 gmEditArea.cGenericEditAreaMixin.__init__(self) 130 131 self.mode = 'new' 132 self.data = data 133 if data is not None: 134 self.mode = 'edit'135 136 #self.__init_ui() 137 #---------------------------------------------------------------- 138 #def __init_ui(self): 139 #---------------------------------------------------------------- 140 # generic Edit Area mixin API 141 #----------------------------------------------------------------143 validity = True 144 145 if self._TCTRL_url.GetValue().strip() == u'': 146 validity = False 147 self.display_tctrl_as_valid(tctrl = self._TCTRL_url, valid = False) 148 self._TCTRL_url.SetFocus() 149 else: 150 self.display_tctrl_as_valid(tctrl = self._TCTRL_url, valid = True) 151 152 # do not check GetData() because comm 153 # types are created as needed 154 #if self._PRW_type.GetData() is None: 155 if self._PRW_type.GetValue().strip() == u'': 156 validity = False 157 self._PRW_type.display_as_valid(False) 158 self._PRW_type.SetFocus() 159 else: 160 self._PRW_type.display_as_valid(True) 161 162 return validity163 #----------------------------------------------------------------165 try: 166 data = self.channel_owner.link_comm_channel ( 167 comm_medium = self._PRW_type.GetValue().strip(), 168 pk_channel_type = self._PRW_type.GetData(), 169 url = self._TCTRL_url.GetValue().strip(), 170 is_confidential = self._CHBOX_confidential.GetValue(), 171 ) 172 except gmPG2.dbapi.IntegrityError: 173 _log.exception('error saving comm channel') 174 gmDispatcher.send(signal = u'statustext', msg = _('Cannot save (duplicate ?) communications channel.'), beep = True) 175 return False 176 177 data['comment'] = self._TCTRL_comment.GetValue().strip() 178 data.save() 179 180 self.data = data 181 return True182 #----------------------------------------------------------------184 comm_type = self._PRW_type.GetValue().strip() 185 if comm_type != u'': 186 self.data['comm_type'] = comm_type 187 url = self._TCTRL_url.GetValue().strip() 188 if url != u'': 189 self.data['url'] = url 190 self.data['is_confidential'] = self._CHBOX_confidential.GetValue() 191 self.data['comment'] = self._TCTRL_comment.GetValue().strip() 192 193 self.data.save() 194 return True195 #----------------------------------------------------------------197 self._PRW_type.SetText(u'') 198 self._TCTRL_url.SetValue(u'') 199 self._CHBOX_confidential.SetValue(False) 200 self._TCTRL_comment.SetValue(u'') 201 202 self._PRW_type.SetFocus()203 #---------------------------------------------------------------- 206 #----------------------------------------------------------------216 """A list for managing a person's comm channels."""305 306 #================================================================ 307 # main 308 #---------------------------------------------------------------- 309 if __name__ == '__main__': 310 311 if len(sys.argv) < 2: 312 sys.exit() 313 314 if sys.argv[1] != 'test': 315 sys.exit() 316 317 from Gnumed.pycommon import gmI18N 318 gmI18N.activate_locale() 319 gmI18N.install_domain() 320 from Gnumed.business import gmPersonSearch 321 322 #--------------------------------------------------------218 219 try: 220 self.__channel_owner = kwargs['identity'] 221 del kwargs['identity'] 222 except KeyError: 223 self.__channel_owner = None 224 225 gmListWidgets.cGenericListManagerPnl.__init__(self, *args, **kwargs) 226 227 self.new_callback = self._add_comm 228 self.edit_callback = self._edit_comm 229 self.delete_callback = self._del_comm 230 self.refresh_callback = self.refresh 231 232 self.__init_ui() 233 self.refresh()234 #-------------------------------------------------------- 235 # external API 236 #--------------------------------------------------------238 if self.__channel_owner is None: 239 self._LCTRL_items.set_string_items() 240 return 241 242 comms = self.__channel_owner.get_comm_channels() 243 self._LCTRL_items.set_string_items ( 244 items = [ [ 245 gmTools.bool2str(c['is_confidential'], u'X', u''), 246 c['l10n_comm_type'], 247 c['url'], 248 gmTools.coalesce(c['comment'], u'') 249 ] for c in comms ] 250 ) 251 self._LCTRL_items.set_column_widths() 252 self._LCTRL_items.set_data(data = comms)253 #-------------------------------------------------------- 254 # internal helpers 255 #--------------------------------------------------------257 self._LCTRL_items.SetToolTipString(_('List of known communication channels.')) 258 self._LCTRL_items.set_columns(columns = [ 259 _('confidential'), 260 _('Type'), 261 _('Value'), 262 _('Comment') 263 ])264 #--------------------------------------------------------266 ea = cCommChannelEditAreaPnl(self, -1) 267 ea.channel_owner = self.__channel_owner 268 dlg = gmEditArea.cGenericEditAreaDlg2(self, -1, edit_area = ea) 269 dlg.SetTitle(_('Adding new communications channel')) 270 if dlg.ShowModal() == wx.ID_OK: 271 return True 272 return False273 #--------------------------------------------------------275 ea = cCommChannelEditAreaPnl(self, -1, comm_channel = comm_channel) 276 ea.channel_owner = self.__channel_owner 277 dlg = gmEditArea.cGenericEditAreaDlg2(self, -1, edit_area = ea, single_entry = True) 278 dlg.SetTitle(_('Editing communications channel')) 279 if dlg.ShowModal() == wx.ID_OK: 280 return True 281 return False282 #--------------------------------------------------------284 go_ahead = gmGuiHelpers.gm_show_question ( 285 _( 'Are you sure this communication channel\n' 286 'can no longer be used ?' 287 ), 288 _('Removing communication channel') 289 ) 290 if not go_ahead: 291 return False 292 self.__channel_owner.unlink_comm_channel(comm_channel = comm) 293 return True294 #-------------------------------------------------------- 295 # properties 296 #-------------------------------------------------------- 299 303 304 channel_owner = property(__get_channel_owner, __set_channel_owner)324 pat = gmPersonSearch.ask_for_patient() 325 app = wx.PyWidgetTester(size = (600, 400)) 326 widget = cCommChannelsManagerPnl(app.frame, -1) 327 widget.identity = pat 328 app.frame.Show(True) 329 app.MainLoop()330 #-------------------------------------------------------- 331 test_person_comms_pnl() 332 333 #================================================================ 334
Home | Trees | Indices | Help |
|
---|
Generated by Epydoc 3.0.1 on Sat Aug 3 03:56:25 2013 | http://epydoc.sourceforge.net |