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