def UnloadPlugin(set, name): """ Unloads the named plugin """ gb = gmGuiBroker.GuiBroker() plugin = gb['horstspace.notebook.%s' % set][name] plugin.unregister()
def __init__(self, parent, id): # main panel wx.Panel.__init__(self, parent=parent, id=id, pos=wx.DefaultPosition, size=wx.DefaultSize, style=wx.NO_BORDER, name='HorstSpace.LayoutMgrPnl') # top "row": important patient data is displayed there continually self.top_panel = gmTopPanel.cTopPnl(self, -1) # notebook self.nb = cHorstSpaceNotebook(parent=self) # plugins self.__gb = gmGuiBroker.GuiBroker() self.__gb['horstspace.top_panel'] = self.top_panel self.__gb[ 'horstspace.notebook'] = self.nb # FIXME: remove per Ian's API suggestion self.__load_plugins() # layout handling self.main_szr = wx.BoxSizer(wx.VERTICAL) self.main_szr.Add(self.top_panel, 0, wx.EXPAND) self.main_szr.Add(self.nb, 1, wx.EXPAND) self.SetSizer(self.main_szr) # self.SetSizerAndFit(self.main_szr) # self.Layout() # self.Show(True) self.__register_events()
def __init__(self, *args, **kwargs): wxgTopPnl.wxgTopPnl.__init__(self, *args, **kwargs) self.__gb = gmGuiBroker.GuiBroker() self.curr_pat = gmPerson.gmCurrentPatient() self.__init_ui() self.__register_interests()
def __init__(self, set='', guibroker=None, callbackbroker=None, params=None): self.gb = guibroker self.cb = callbackbroker if self.gb is None: self.gb = gmGuiBroker.GuiBroker() self.set = set
def instantiate_plugin(aPackage='xxxDEFAULTxxx', plugin_name='xxxDEFAULTxxx'): """Instantiates a plugin object from a package directory, returning the object. NOTE: it does NOT call register() for you !!!! - "set" specifies the subdirectory in which to find the plugin - this knows nothing of databases, all it does is instantiate a named plugin There will be a general 'gui' directory for large GUI components: prescriptions, etc., then several others for more specific types: export/import filters, crypto algorithms guibroker, dbbroker are broker objects provided defaults are the default set of plugins to be loaded FIXME: we should inform the user about failing plugins """ # we do need brokers, else we are useless gb = gmGuiBroker.GuiBroker() # bean counting ! -> loaded plugins if not ('horstspace.notebook.%s' % aPackage) in gb.keylist(): gb['horstspace.notebook.%s' % aPackage] = {} if not 'horstspace.notebook.pages' in gb.keylist(): gb['horstspace.notebook.pages'] = [] module_from_package = __gm_import('Gnumed.wxpython.%s.%s' % (aPackage, plugin_name)) # find name of class of plugin (must be the same as the plugin module filename) plugin_class = module_from_package.__dict__[plugin_name] if not issubclass(plugin_class, cNotebookPlugin): _log.error("[%s] not a subclass of cNotebookPlugin" % plugin_name) return None _log.info(plugin_name) try: plugin = plugin_class() except Exception: _log.exception('Cannot open module "%s.%s".' % (aPackage, plugin_name)) return None return plugin
def __init__(self, parent, plugin, id=wxNewId()): wxPanel.__init__(self, parent, id, wxDefaultPosition, wxDefaultSize, wxRAISED_BORDER | wxTAB_TRAVERSAL) gmDataPanelMixin.DataPanelMixin.__init__(self) self.gb = gmGuiBroker.GuiBroker() self.mwm = self.gb['clinical.manager'] self.plugin = plugin # controls on the top toolbar are available via plugin.foo self.addresslist = wxListBox(self, ID_NAMESLIST, wxDefaultPosition, wxDefaultSize, addressdata, wxLB_SINGLE) self.addresslist.SetFont( wxFont(12, wxSWISS, wxNORMAL, wxNORMAL, False, '')) #first list with patient names self.addresslist.SetForegroundColour(wxColor(180, 182, 180)) # code to link up SQLListControl self.patientslist = gmSQLListControl.SQLListControl( self, ID_PATIENTSLIST, hideid=True, style=wxLC_REPORT | wxLC_NO_HEADER | wxSUNKEN_BORDER) self.patientslist.SetFont( wxFont(12, wxSWISS, wxNORMAL, wxNORMAL, False, '')) #first list with patient names EVT_LIST_ITEM_SELECTED(self.patientslist, ID_PATIENTSLIST, self.OnPatient) self.lbl_surname = BlueLabel(self, -1, "Surname") self.lbl_firstname = BlueLabel(self, -1, "Firstname") self.lbl_preferredname = BlueLabel(self, -1, "Salutation") self.lbl_title = BlueLabel(self, -1, "Title") self.lbl_sex = BlueLabel(self, -1, "Sex ") self.lbl_street = BlueLabel(self, -1, "Street") self.lbl_suburb = BlueLabel(self, -1, "Suburb") self.lbl_zip = BlueLabel(self, -1, "Postcode") self.lbl_address_s = BlueLabel(self, -1, "Address(s)") self.lbl_birthdate = BlueLabel(self, -1, "Birthdate") self.lbl_maritalstatus = BlueLabel(self, -1, " Marital Status") self.lbl_occupation = BlueLabel(self, -1, "Occupation") self.lbl_birthplace = BlueLabel(self, -1, "Born In") self.lbl_nextofkin = BlueLabel(self, -1, "") self.lbl_addressNOK = BlueLabel(self, -1, "Next of Kin") self.lbl_relationship = BlueLabel(self, -1, " Relationship ") self.lbl_homephone = BlueLabel(self, -1, "Home Phone") self.lbl_workphone = BlueLabel(self, -1, "Work Phone") self.lbl_fax = BlueLabel(self, -1, "Fax") self.lbl_mobile = BlueLabel(self, -1, "Mobile") self.lbl_email = BlueLabel(self, -1, "Email") self.lbl_web = BlueLabel(self, -1, "Web") self.lbl_mobile = BlueLabel(self, -1, "Mobile") self.lbl_line6gap = BlueLabel(self, -1, "") self.titlelist = ['Mr', 'Mrs', 'Miss', 'Mst', 'Ms', 'Dr', 'Prof'] self.combo_relationship = wxComboBox(self, 500, "", wxDefaultPosition, wxDefaultSize, ['Father', 'Mother'], wxCB_DROPDOWN) self.txt_surname = TextBox_RedBold(self, -1) self.combo_title = wxComboBox(self, 500, "", wxDefaultPosition, wxDefaultSize, self.titlelist, wxCB_DROPDOWN) self.txt_firstname = TextBox_RedBold(self, -1) self.combo_sex = wxComboBox(self, 500, "", wxDefaultPosition, wxDefaultSize, ['M', 'F'], wxCB_DROPDOWN) self.cb_preferredname = wxCheckBox(self, -1, _("Preferred Name"), wxDefaultPosition, wxDefaultSize, wxNO_BORDER) self.txt_preferred = TextBox_RedBold(self, -1) self.txt_address = wxTextCtrl(self, 30, "", wxDefaultPosition, wxDefaultSize, style=wxTE_MULTILINE | wxNO_3D | wxSIMPLE_BORDER) self.txt_address.SetInsertionPoint(0) self.txt_address.SetFont( wxFont(12, wxSWISS, wxNORMAL, wxNORMAL, False, '')) self.txt_suburb = TextBox_BlackNormal(self, -1) self.txt_zip = TextBox_BlackNormal(self, -1) self.txt_birthdate = TextBox_BlackNormal(self, -1) self.combo_maritalstatus = wxComboBox(self, 500, "", wxDefaultPosition, wxDefaultSize, ['single', 'married'], wxCB_DROPDOWN) self.txt_occupation = TextBox_BlackNormal(self, -1) self.txt_countryofbirth = TextBox_BlackNormal(self, -1) self.btn_browseNOK = wxButton( self, -1, "Browse NOK") #browse database to pick next of Kin self.txt_nameNOK = wxTextCtrl(self, 30, "Peter Smith \n" "22 Lakes Way \n" "Valentine 2280", wxDefaultPosition, wxDefaultSize, style=wxTE_MULTILINE | wxNO_3D | wxSIMPLE_BORDER) self.txt_nameNOK.SetInsertionPoint(0) self.txt_nameNOK.SetFont( wxFont(12, wxSWISS, wxNORMAL, wxNORMAL, False, '')) self.txt_homephone = TextBox_BlackNormal(self, -1) self.txt_workphone = TextBox_BlackNormal(self, -1) self.txt_fax = TextBox_BlackNormal(self, -1) self.txt_email = TextBox_BlackNormal(self, -1) self.txt_web = TextBox_BlackNormal(self, -1) self.txt_mobile = TextBox_BlackNormal(self, -1) #---------------------- #create the check boxes #---------------------- self.cb_addressresidence = wxCheckBox(self, -1, " Residence ", wxDefaultPosition, wxDefaultSize, wxNO_BORDER) self.cb_addresspostal = wxCheckBox(self, -1, " Postal ", wxDefaultPosition, wxDefaultSize, wxNO_BORDER) #-------------------- # create the buttons #-------------------- self.btn_photo_import = wxButton(self, -1, "Import") self.btn_photo_export = wxButton(self, -1, "Export") self.btn_photo_aquire = wxButton(self, -1, "Acquire") #------------------------------------------------------- #Add the each line of controls to a horizontal box sizer #------------------------------------------------------- self.sizer_line0_left = wxBoxSizer(wxHORIZONTAL) #line one:surname, title self.sizer_line1_left = wxBoxSizer(wxHORIZONTAL) self.sizer_line1_left.Add(self.lbl_surname, 3, wxGROW | wxALIGN_CENTER_VERTICAL, 5) self.sizer_line1_left.Add(self.txt_surname, 7, wxEXPAND) self.sizer_line1_left.Add(0, 0, 1) self.sizer_line1_left.Add(self.lbl_title, 2, wxALIGN_CENTER_VERTICAL, 5) self.sizer_line1_left.Add(self.combo_title, 4, wxEXPAND) #line two:firstname, sex self.sizer_line2_left = wxBoxSizer(wxHORIZONTAL) self.sizer_line2_left.Add(self.lbl_firstname, 3, wxGROW | wxALIGN_CENTER_VERTICAL, 5) self.sizer_line2_left.Add(self.txt_firstname, 7, wxEXPAND) self.sizer_line2_left.Add(0, 0, 1) self.sizer_line2_left.Add(self.lbl_sex, 2, wxGROW | wxALIGN_CENTER_VERTICAL, 5) self.sizer_line2_left.Add(self.combo_sex, 4, wxEXPAND) #line three:preferred salutation self.sizer_line3_left = wxBoxSizer(wxHORIZONTAL) self.sizer_line3_left.Add(self.lbl_preferredname, 3, wxGROW | wxALIGN_CENTER_VERTICAL, 5) self.sizer_line3_left.Add(self.txt_preferred, 7, wxEXPAND) self.sizer_line3_left.Add(1, 0, 7) #line four: preferred alias self.sizer_line4_left = wxBoxSizer(wxHORIZONTAL) self.sizer_line4_left.Add(1, 0, 3) self.sizer_line4_left.Add(self.cb_preferredname, 7, wxEXPAND) self.sizer_line4_left.Add(1, 0, 7) #line6 on this left side is blank self.sizer_line6_left = wxBoxSizer(wxHORIZONTAL) self.sizer_line6_left.Add(self.lbl_line6gap, 1, wxEXPAND) #---------------- #3:street details #a) the label sizer_lblstreet = wxBoxSizer(wxVERTICAL) sizer_lblstreet.Add(self.lbl_street, 1, wxEXPAND) #-------------------- #3:street details #b) multiline textbox #------------------- self.sizer_line7_left = wxBoxSizer(wxHORIZONTAL) self.sizer_line7_left.Add(0, 0, 1) #------------------------------ #3:street details #c) residence or postal address #------------------------------ sizer_respostal = wxBoxSizer(wxVERTICAL) sizer_respostal.Add(self.cb_addressresidence, 1, wxEXPAND) sizer_respostal.Add(self.cb_addresspostal, 1, wxEXPAND) #sizer_respostal.Add(1,0,1) self.sizer_line7_left = wxBoxSizer(wxHORIZONTAL) self.sizer_line7_left.Add(sizer_lblstreet, 3, wxALIGN_CENTER_VERTICAL, 5) self.sizer_line7_left.Add(self.txt_address, 7, wxEXPAND) self.sizer_line7_left.Add(0, 0, 1) self.sizer_line7_left.Add(sizer_respostal, 6, wxEXPAND) #-------------------------- # create the suburb details #-------------------------- self.sizer_line8_left = wxBoxSizer(wxHORIZONTAL) self.sizer_line8_left.Add(self.lbl_suburb, 3, wxALIGN_CENTER_VERTICAL, 5) self.sizer_line8_left.Add(self.txt_suburb, 7, wxEXPAND) self.sizer_line8_left.Add(0, 0, 1) self.sizer_line8_left.Add(self.lbl_zip, 3, wxALIGN_CENTER_VERTICAL, 5) self.sizer_line8_left.Add(self.txt_zip, 3, wxEXPAND) #-------------------------------- # create the multiple address box #-------------------------------- self.sizer_line9_left = wxBoxSizer(wxHORIZONTAL) self.sizer_line9_left.Add(self.lbl_address_s, 3, wxALIGN_CENTER_VERTICAL, 5) self.sizer_line9_left.Add(self.addresslist, 14, wxEXPAND) #------------------------------------------------------------------------- #now add all the left hand line sizers to the one left hand vertical sizer #------------------------------------------------------------------------- self.leftside = wxBoxSizer(wxVERTICAL) self.leftside.Add(self.sizer_line1_left, 0, wxEXPAND | wxALL, 1) self.leftside.Add(self.sizer_line2_left, 0, wxEXPAND | wxALL, 1) self.leftside.Add(self.sizer_line3_left, 0, wxEXPAND | wxALL, 1) self.leftside.Add(self.sizer_line4_left, 0, wxEXPAND | wxALL, 1) self.leftside.Add(self.sizer_line6_left, 0, wxEXPAND | wxALL, 1) self.leftside.Add(self.sizer_line7_left, 0, wxEXPAND | wxALL, 1) self.leftside.Add(self.sizer_line8_left, 0, wxEXPAND | wxALL, 1) self.leftside.Add(self.sizer_line9_left, 0, wxEXPAND | wxALL, 1) #--------------------------------------------------- #now add textboxes etc to the right hand line sizers #--------------------------------------------------- self.sizer_line0_right = wxBoxSizer(wxHORIZONTAL) self.sizer_line1_right = wxBoxSizer(wxHORIZONTAL) self.sizer_line2_right = wxBoxSizer(wxHORIZONTAL) self.sizer_line3_right = wxBoxSizer(wxHORIZONTAL) self.sizer_line4_right = wxBoxSizer(wxHORIZONTAL) self.sizer_line5_right = wxBoxSizer(wxHORIZONTAL) self.sizer_line6_right = wxBoxSizer(wxHORIZONTAL) self.sizer_line7_right = wxBoxSizer(wxHORIZONTAL) self.sizer_line8_right = wxBoxSizer(wxHORIZONTAL) self.sizer_line9_right = wxBoxSizer(wxHORIZONTAL) self.sizer_line10_right = wxBoxSizer(wxHORIZONTAL) self.sizer_line11_right = wxBoxSizer(wxHORIZONTAL) #line1 _ birthdate, maritial status self.sizer_line1_right.Add(self.lbl_birthdate, 2, wxALIGN_CENTER_VERTICAL, 0) self.sizer_line1_right.Add(self.txt_birthdate, 2, wxALIGN_LEFT) self.sizer_line1_right.Add(self.lbl_maritalstatus, 2, wxALIGN_CENTRE, 0) self.sizer_line1_right.Add(self.combo_maritalstatus, 2, wxALIGN_CENTER_VERTICAL, 0) #line2 - occupation (use word wheel later in place of text box) self.sizer_line2_right.Add(self.lbl_occupation, 2, wxALIGN_CENTER_VERTICAL, 0) self.sizer_line2_right.Add(self.txt_occupation, 6, wxEXPAND) #line3 - country of birth (use word wheel later) self.sizer_line3_right.Add(self.lbl_birthplace, 2, wxALIGN_CENTER_VERTICAL, 0) self.sizer_line3_right.Add(self.txt_countryofbirth, 6, wxEXPAND) #line 4 - next of kin + browse for next of kin self.sizer_line4_right.Add(self.lbl_nextofkin, 2, wxALIGN_CENTER_VERTICAL, 0) self.sizer_line4_right.Add(self.btn_browseNOK, 2, wxALIGN_CENTER_VERTICAL) #self.sizer_line4_right.Add(0,0,1) self.sizer_line4_right.Add(self.lbl_relationship, 2, wxALIGN_CENTER_VERTICAL, 0) self.sizer_line4_right.Add(self.combo_relationship, 2, wxEXPAND) #name of next of kin self.sizer_gap_vertical = wxBoxSizer(wxVERTICAL) self.sizer_gap_vertical.Add(1, 47, 1) self.sizer_line5_right.Add(self.lbl_addressNOK, 2, wxEXPAND) self.sizer_line5_right.Add(self.txt_nameNOK, 6, wxEXPAND) self.sizer_line5_right.AddSizer(self.sizer_gap_vertical) #---------------------------------------------------------------------------- # Contact numbers are on their own separate vertical sizer as the photo sits # next to this #---------------------------------------------------------------------------- self.sizer_contacts = wxBoxSizer(wxVERTICAL) self.sizer_line6_right.Add(self.lbl_homephone, 3, wxALIGN_CENTRE, 0) self.sizer_line6_right.Add(self.txt_homephone, 5, wxEXPAND) self.sizer_line6_right.Add(0, 0, 1) self.sizer_contacts.Add(self.sizer_line6_right, 0, wxEXPAND) self.sizer_line7_right.Add(self.lbl_workphone, 3, wxALIGN_CENTRE, 0) self.sizer_line7_right.Add(self.txt_workphone, 5, wxEXPAND) self.sizer_line7_right.Add(0, 0, 1) self.sizer_contacts.Add(self.sizer_line7_right, 0, wxEXPAND) self.sizer_line8_right.Add(self.lbl_fax, 3, wxALIGN_CENTRE, 0) self.sizer_line8_right.Add(self.txt_fax, 5, wxEXPAND) self.sizer_line8_right.Add(0, 0, 1) self.sizer_contacts.Add(self.sizer_line8_right, 0, wxEXPAND) self.sizer_line9_right.Add(self.lbl_email, 3, wxALIGN_CENTRE, 0) self.sizer_line9_right.Add(self.txt_email, 5, wxEXPAND) self.sizer_line9_right.Add(0, 0, 1) self.sizer_contacts.Add(self.sizer_line9_right, 0, wxEXPAND) self.sizer_line10_right.Add(self.lbl_web, 3, wxALIGN_CENTRE, 0) self.sizer_line10_right.Add(self.txt_web, 5, wxEXPAND) self.sizer_line10_right.Add(0, 0, 1) self.sizer_contacts.Add(self.sizer_line10_right, 0, wxEXPAND) self.sizer_line11_right.Add(self.lbl_mobile, 3, wxALIGN_CENTRE, 0) self.sizer_line11_right.Add(self.txt_mobile, 5, wxEXPAND) self.sizer_line11_right.Add(0, 0, 1) self.sizer_contacts.Add(self.sizer_line11_right, 0, wxEXPAND) self.sizer_photo = wxBoxSizer(wxVERTICAL) # self.patientpicture = gmGP_PatientPicture.cPatientPicture(self, -1) self.sizer_photo.Add(self.patientpicture, 3, wxALIGN_CENTER_HORIZONTAL, 0) self.sizer_photo.Add(self.btn_photo_aquire, 1, wxALIGN_CENTER_HORIZONTAL, 0) self.sizer_photo.Add(self.btn_photo_export, 1, wxALIGN_CENTER_HORIZONTAL, 0) self.sizer_photo.Add(self.btn_photo_import, 1, wxALIGN_CENTER_HORIZONTAL, 0) self.sizer_contactsandphoto = wxBoxSizer(wxHORIZONTAL) self.sizer_contactsandphoto.AddSizer(self.sizer_contacts, 6, wxALIGN_CENTER_VERTICAL, 0) self.sizer_contactsandphoto.AddSizer(self.sizer_photo, 2, wxALIGN_CENTER_VERTICAL, 0) self.rightside = wxBoxSizer(wxVERTICAL) self.rightside.Add(self.sizer_line1_right, 0, wxEXPAND | wxALL, 1) self.rightside.Add(self.sizer_line2_right, 0, wxEXPAND | wxALL, 1) self.rightside.Add(self.sizer_line3_right, 0, wxEXPAND | wxALL, 1) self.rightside.Add(self.sizer_line4_right, 0, wxEXPAND | wxALL, 1) self.rightside.Add(self.sizer_line5_right, 0, wxEXPAND | wxALL, 1) self.rightside.Add(self.sizer_contactsandphoto, 0, wxEXPAND | wxALL, 1) self.mainsizer = wxBoxSizer(wxVERTICAL) self.topsizer = wxBoxSizer(wxHORIZONTAL) self.sizerunder = wxBoxSizer(wxHORIZONTAL) self.sizerunder.AddSizer(self.leftside, 10, wxEXPAND | wxALL, 5) self.sizerunder.Add(1, 0, 1) self.sizerunder.AddSizer(self.rightside, 10, wxEXPAND | wxALL, 5) self.mainsizer.Add(self.patientslist, 3, wxEXPAND) self.mainsizer.Add(self.sizerunder, 0, wxEXPAND | wxALL, 10) self.SetSizer(self.mainsizer) self.SetAutoLayout(True) self.Show(False)
def __init__(self, parent): # default frame style - maximize box + float on parent + centering + tabbing # wx.FRAME_FLOAT_ON_PARENT makes it modal wx.Frame.__init__(self, parent, -1, _("BMI Calculator"), style=wx.MINIMIZE_BOX | wx.MAXIMIZE_BOX | wx.RESIZE_BORDER | wx.CAPTION | wx.ALIGN_CENTER | wx.ALIGN_CENTER_VERTICAL | wx.TAB_TRAVERSAL | wx.STAY_ON_TOP) wx.EVT_CLOSE(self, self.OnCloseWindow) #----------------------------------------------------- #create an instance of the BMICalc_Panel #----------------------------------------------------- self.pnl_bmi = BMICalc_Panel(self, -1) #-------------------------------------------------- # right hand vertical sizer # ----------------------- # | graph/text | # |-----------------------| # | gap | # |-----------------------| # | btn | btn | btn | ... | # ----------------------- # surrogate text for graphics text4graph = wx.TextCtrl( self, -1, "Hi Guys, this is a prototype BMI Calculator + graph.\n\n" "Comments please to [email protected]..\n\n" "Can someone tell me how to centre this frame on the screen...\n\n" "This text box needs to be replaced by a graph class....\n" "which amongst other things could show this patients mass trends!!!!\n\n" "The mass range on the green epilpse would be calculated for each patient...\n\n" "BTW, don't worry about your weight, the 'normal' range (63-79) is hardcoded.", size=(200, 100), style=wx.TE_MULTILINE | wx.TE_READONLY) # buttons gszr_right_buttons = wx.GridSizer(1, 4, 1, 4) # rows, cols, hgap, vgap gszr_right_buttons.AddMany([ (wx.Button(self, 1010, _('&Reset')), 0, wx.EXPAND) # , # (wx.Button(self, 1011, _('&Print')), 0, wxEXPAND), # (wx.Button(self, 1012, _('&Save')), 0, wxEXPAND), # (wx.Button(self, 1013, _('&Handout')), 0, wxEXPAND) ]) wx.EVT_BUTTON(self, 1010, self.EvtReset) # wx.EVT_BUTTON(self,1011,self.EvtPrint) # wx.EVT_BUTTON(self,1012,self.EvtSave) # wx.EVT_BUTTON(self,1013,self.EvtHandout) # arrange them szr_right_col = wx.BoxSizer(wx.VERTICAL) szr_right_col.Add(text4graph, 1, wx.EXPAND) szr_right_col.Add((1, 5), 0, wx.EXPAND) szr_right_col.Add(gszr_right_buttons, 0, wx.EXPAND) #-------------------------------------------------- # horizontal main sizer # -------------------------- # | input | g | graph/text | # | fields | a |------------| # | | p | buttons | # -------------------------- szr_main = wx.BoxSizer(wx.HORIZONTAL) szr_main.Add(self.pnl_bmi, 0, wx.EXPAND | wx.ALL, 10) szr_main.Add((5, 0), 0, wx.EXPAND) szr_main.Add(szr_right_col, 1, wx.EXPAND | wx.ALL, 10) self.SetSizer(szr_main) szr_main.Fit(self) self.SetAutoLayout(True) # get icon if __name__ == '__main__': png_fname = os.path.join('..', 'bitmaps', 'bmi_calculator.png') else: from Gnumed.pycommon import gmGuiBroker gb = gmGuiBroker.GuiBroker() png_fname = os.path.join(gb['gnumed_dir'], 'bitmaps', 'bmi_calculator.png') icon = wx.Icon() icon.LoadFile(png_fname, wx.BITMAP_TYPE_PNG) self.SetIcon(icon)
def __init__(self): self.gb = gmGuiBroker.GuiBroker() self._set = 'gui' self._widget = None self.__register_events()
def __init__(self, parent): myStyle = wx.MINIMIZE_BOX | wx.CAPTION | wx.ALIGN_CENTER | \ wx.ALIGN_CENTER_VERTICAL | wx.TAB_TRAVERSAL | wx.STAY_ON_TOP wx.Frame.__init__(self, parent, -1, _("Pregnancy Calculator"), style=myStyle) # initialization of variables used in the control & calculation self.xfer_cal_date_to = LMP_FIELD # controls which variable (LMP or Ultrasound) a calendar event changes # (if == 0): {calendar selection modifies LMP} # (if == 1): {calendar selection modifies Ultrasound Date} self.ustxt = wx.DateTime_Today( ) # avoids problem - one would have if the user clicked on # ultrasound date # BONUS: makes the preg. calculator useful for EDC calcs given # a date and the gestation time # get icon if __name__ == '__main__': png_fname = os.path.join('..', 'bitmaps', 'preg_calculator.png') else: from Gnumed.pycommon import gmGuiBroker gb = gmGuiBroker.GuiBroker() png_fname = os.path.join(gb['gnumed_dir'], 'bitmaps', 'preg_calculator.png') icon = wx.Icon() icon.LoadFile(png_fname, wx.BITMAP_TYPE_PNG) self.SetIcon(icon) szr_rc = wx.lib.rcsizer.RowColSizer() #------------------------------ # sizer holding the 'LMP' stuff #------------------------------ label = wx.StaticText(self, -1, _("LMP"), size=(50, 20)) #label Lmp label.SetFont(wx.Font(12, wx.SWISS, wx.NORMAL, wx.NORMAL, False, '')) label.SetForegroundColour(wx.Colour(0, 0, 0)) self.txt_lmp = wx.TextCtrl(self, -1, "", size=(100, 20)) # text for lmp self.txt_lmp.SetFont( wx.Font(12, wx.SWISS, wx.NORMAL, wx.NORMAL, False, '')) self.txt_lmp.SetToolTip( wx.ToolTip( _("Click on calendar to enter the last menstrual period date")) ) #tiplmp=self.txt_lmp.GetToolTip() szr_row1 = wx.BoxSizer(wx.HORIZONTAL) szr_row1.Add(self.txt_lmp, 1, wx.EXPAND | wx.ALL, 2) wx.EVT_SET_FOCUS(self.txt_lmp, self.OnSetFocus_lmp) szr_lmp = wx.BoxSizer(wx.HORIZONTAL) szr_lmp.Add(label, 1, 0, 0) szr_lmp.Add((10, 1), 0, 0) szr_rc.Add(szr_lmp, flag=wx.EXPAND, row=0, col=1) szr_rc.Add(szr_row1, flag=wx.EXPAND, row=0, col=2, colspan=5) #------------------------------ # sizer holding the 'Gest.' stuff #------------------------------ label = wx.StaticText(self, -1, _("Gest."), size=(50, 20)) label.SetFont(wx.Font(12, wx.SWISS, wx.NORMAL, wx.NORMAL, False, '')) label.SetForegroundColour(wx.Colour(0, 0, 0)) self.txtgest = wx.TextCtrl(self, -1, "", size=(100, 20)) self.txtgest.Enable(False) self.txtgest.SetFont( wx.Font(12, wx.SWISS, wx.NORMAL, wx.NORMAL, False, '')) self.txtgest_szr = wx.BoxSizer(wx.HORIZONTAL) self.txtgest_szr.Add(self.txtgest, 1, wx.EXPAND | wx.ALL, 2) szr_gest = wx.BoxSizer(wx.HORIZONTAL) szr_gest.Add(label, 1, 0, 0) szr_gest.Add((10, 1), 0, 0) szr_rc.Add(szr_gest, flag=wx.EXPAND, row=1, col=1) szr_rc.Add(self.txtgest_szr, flag=wx.EXPAND, row=1, col=2, colspan=5) #------------------------------ # sizer holding the 'EDC' stuff #------------------------------ label = wx.StaticText(self, -1, _("EDC"), size=(50, 20)) label.SetFont(wx.Font(12, wx.SWISS, wx.NORMAL, wx.NORMAL, False, '')) label.SetForegroundColour(wx.Colour(0, 0, 0)) self.txtedc = wx.TextCtrl(self, -1, "", size=(100, 20)) self.txtedc.Enable(False) self.txtedc.SetFont( wx.Font(12, wx.SWISS, wx.NORMAL, wx.NORMAL, False, '')) szr_txtedc = wx.BoxSizer(wx.HORIZONTAL) szr_txtedc.Add(self.txtedc, 1, wx.EXPAND | wx.ALL, 2) szr_edc = wx.BoxSizer(wx.HORIZONTAL) szr_edc.Add(label, 1, 0, 0) szr_edc.Add((10, 1), 0, 0) szr_rc.Add(szr_edc, flag=wx.EXPAND, row=2, col=1) szr_rc.Add(szr_txtedc, flag=wx.EXPAND, row=2, col=2, colspan=5) #------------------------------ # "Ultrasound Scan" label #------------------------------ us_label = wx.StaticText(self, -1, _("18 Week Ultrasound Scan"), size=(200, 20)) us_label.SetFont(wx.Font(10, wx.SWISS, wx.NORMAL, wx.BOLD, False, '')) us_label.SetForegroundColour(wx.Colour(50, 50, 204)) szr_backgrnd_18WkScanDue = wx.BoxSizer(wx.VERTICAL) szr_backgrnd_18WkScanDue.Add((1, 3), 0) szr_backgrnd_18WkScanDue.Add(us_label, 1, wx.EXPAND, 1) szr_rc.Add(szr_backgrnd_18WkScanDue, flag=wx.ALIGN_CENTRE_HORIZONTAL, row=3, col=2, colspan=5) #------------------------------ # sizer holding the 'Due' stuff #------------------------------ label = wx.StaticText(self, -1, _("Due"), size=(100, 20)) label.SetFont(wx.Font(12, wx.SWISS, wx.NORMAL, wx.NORMAL, False, '')) label.SetForegroundColour(wx.Colour(0, 0, 0)) self.txtdue = wx.TextCtrl(self, -1, "", size=(100, 20)) self.txtdue.Enable(False) self.txtdue.SetFont( wx.Font(12, wx.SWISS, wx.NORMAL, wx.NORMAL, False, '')) self.szr_txtdue = wx.BoxSizer(wx.HORIZONTAL) self.szr_txtdue.Add(self.txtdue, 1, wx.EXPAND | wx.ALL, 2) szr_due = wx.BoxSizer(wx.HORIZONTAL) szr_due.Add(label, 1, 0, 0) szr_due.Add((10, 1), 0, 0) szr_rc.Add(szr_due, flag=wx.EXPAND, row=4, col=1) szr_rc.Add(self.szr_txtdue, flag=wx.EXPAND, row=4, col=2, colspan=5) #------------------------------ # "Ultrasound Scan - Revised EDC" label #------------------------------ rev_edc_label = wx.StaticText(self, -1, _("Ultrasound Scan - Revised EDC"), size=(300, 20)) rev_edc_label.SetFont( wx.Font(10, wx.SWISS, wx.NORMAL, wx.BOLD, False, '')) rev_edc_label.SetForegroundColour(wx.Colour(50, 50, 204)) szr_backgrnd_RevEDCLabel = wx.BoxSizer(wx.VERTICAL) szr_backgrnd_RevEDCLabel.Add((1, 3), 0) szr_backgrnd_RevEDCLabel.Add(rev_edc_label, 1, wx.EXPAND, 1) szr_rc.Add(szr_backgrnd_RevEDCLabel, flag=wx.ALIGN_CENTRE_HORIZONTAL, row=5, col=2, colspan=5) #------------------------------ # sizer holding the 'newedc' stuff #------------------------------ label1 = wx.StaticText(self, -1, _("Scan Date"), size=(25, 20)) label1.SetFont(wx.Font(12, wx.SWISS, wx.NORMAL, wx.NORMAL, False, '')) label1.SetForegroundColour(wx.Colour(0, 0, 0)) self.txtdate = wx.TextCtrl(self, -1, "", size=(25, 20)) self.txtdate.SetFont( wx.Font(12, wx.SWISS, wx.NORMAL, wx.NORMAL, False, '')) self.txtdate.SetToolTip( wx.ToolTip( _("Click on this field and then the ultrasound scan date on the calendar" ))) #tipdue=self.txtdate.GetToolTip() #wx.ToolTip_Enable(1) self.szr_txtdate = wx.BoxSizer(wx.HORIZONTAL) self.szr_txtdate.Add(self.txtdate, 1, wx.EXPAND | wx.ALL, 2) wx.EVT_SET_FOCUS(self.txtdate, self.OnSetFocus_USDate) szr_label1 = wx.BoxSizer(wx.HORIZONTAL) szr_label1.Add(label1, 1, 0, 0) szr_label1.Add((10, 1), 0, 0) szr_rc.Add(szr_label1, flag=wx.EXPAND, row=6, col=1) szr_rc.Add(self.szr_txtdate, flag=wx.EXPAND, row=6, col=2, colspan=5) #------------------------------ label2 = wx.StaticText(self, -1, _("Weeks"), size=(25, 20)) label2.SetFont(wx.Font(12, wx.SWISS, wx.NORMAL, wx.NORMAL, False, '')) label2.SetForegroundColour(wx.Colour(0, 0, 0)) self.txtweeks = wx.SpinCtrl(self, -1, value="0", min=0, max=42) wx.EVT_SPINCTRL(self.txtweeks, self.txtweeks.GetId(), self.EvtText_calcnewedc) self.txtweeks.SetFont( wx.Font(12, wx.SWISS, wx.NORMAL, wx.NORMAL, False, '')) self.szr_txtweeks = wx.BoxSizer(wx.HORIZONTAL) self.szr_txtweeks.Add(self.txtweeks, 1, wx.EXPAND | wx.ALL, 2) label3 = wx.StaticText(self, -1, _("Days"), size=(25, 20)) label3.SetFont(wx.Font(12, wx.SWISS, wx.NORMAL, wx.NORMAL, False, '')) label3.SetForegroundColour(wx.Colour(0, 0, 0)) self.txtdays = wx.SpinCtrl(self, -1, value="0", min=0, max=6) wx.EVT_SPINCTRL(self.txtdays, self.txtdays.GetId(), self.EvtText_calcnewedc) self.txtdays.SetFont( wx.Font(12, wx.SWISS, wx.NORMAL, wx.NORMAL, False, '')) self.szr_txtdays = wx.BoxSizer(wx.HORIZONTAL) self.szr_txtdays.Add(self.txtdays, 1, wx.EXPAND | wx.ALL, 2) szr_label2 = wx.BoxSizer(wx.HORIZONTAL) szr_label2.Add(label2, 1, wx.ALIGN_CENTRE_VERTICAL, 0) szr_label2.Add((10, 1), 0, 0) szr_label3 = wx.BoxSizer(wx.HORIZONTAL) szr_label3.Add((10, 1), 0, 0) szr_label3.Add(label3, 1, wx.ALIGN_CENTRE_VERTICAL, 0) szr_label3.Add((10, 1), 0, 0) szr_rc.Add(szr_label2, flag=wx.EXPAND, row=7, col=1) szr_rc.Add(self.szr_txtweeks, flag=wx.EXPAND, row=7, col=2, colspan=2) szr_rc.Add(szr_label3, flag=wx.EXPAND, row=7, col=4) szr_rc.Add(self.szr_txtdays, flag=wx.EXPAND, row=7, col=5, colspan=2) #------------------------------ # sizer holding the new (or revised) 'EDC' stuff #------------------------------ label = wx.StaticText(self, -1, _("Rev EDC"), size=(100, 20)) label.SetFont(wx.Font(12, wx.SWISS, wx.NORMAL, wx.NORMAL, False, '')) label.SetForegroundColour(wx.Colour(0, 0, 0)) self.txtnewedc = wx.TextCtrl(self, -1, "", size=(100, 20)) self.txtnewedc.Enable(False) self.txtnewedc.SetFont( wx.Font(12, wx.SWISS, wx.NORMAL, wx.NORMAL, False, '')) self.szr_txtnewedc = wx.BoxSizer(wx.HORIZONTAL) self.szr_txtnewedc.Add(self.txtnewedc, 1, wx.EXPAND | wx.ALL, 2) szr_label = wx.BoxSizer(wx.HORIZONTAL) szr_label.Add(label, 1, 0, 0) szr_label.Add((10, 1), 0, 0) szr_rc.Add(szr_label, flag=wx.EXPAND, row=8, col=1) szr_rc.Add(self.szr_txtnewedc, flag=wx.EXPAND, row=8, col=2, colspan=5) self.btnPrint = wx.Button(self, 1011, _('&Print')) self.btnSave = wx.Button(self, 1011, _('&Save')) szr_buttons = wx.BoxSizer(wx.HORIZONTAL) szr_buttons.Add(self.btnPrint, 0, wx.EXPAND) szr_buttons.Add(self.btnSave, 0, wx.EXPAND) szr_rc.Add(szr_buttons, flag=wx.EXPAND, row=9, col=3, colspan=4) #------------------------------ # Sizer holding stuff on the right #------------------------------ szr_main_rt = wx.BoxSizer(wx.VERTICAL) szr_main_rt.Add(szr_rc) wx.EVT_BUTTON(self, 1010, self.EvtReset) wx.EVT_BUTTON(self, 1011, self.EvtPrint) wx.EVT_BUTTON(self, 1012, self.EvtSave) #------------------------------ # Add calendar (stuff on the left) #------------------------------ self.lmp_cal = wx.calendar.CalendarCtrl(self, ID_LMP, style=wx.RAISED_BORDER) wx.calendar.EVT_CALENDAR_SEL_CHANGED(self.lmp_cal, ID_LMP, self.OnCalcByLMP) szr_main_lf = wx.BoxSizer(wx.VERTICAL) szr_main_lf.Add(self.lmp_cal, 0, wx.ALIGN_CENTRE_HORIZONTAL) btn_reset = wx.Button(self, 1010, _('&Reset')) #szr_main_lf.Add(5,0,5) szr_main_lf.Add(btn_reset, 0, wx.EXPAND) #-------------------------------------- # Super-sizer holds all the stuff above #-------------------------------------- szr_main_top = wx.BoxSizer(wx.HORIZONTAL) szr_main_top.Add(szr_main_lf, 0, 0) szr_main_top.Add((15, 0), 0, 0) szr_main_top.Add(szr_main_rt, 0, 0) #szr_main_top.Add(15,1,0,0) #------------------------------ # Put everything together in one big sizer #------------------------------ szr_main = wx.BoxSizer(wx.HORIZONTAL) szr_main.Add(szr_main_top, 1, wx.EXPAND | wx.ALL, 10) self.SetSizer(szr_main) self.SetAutoLayout(1) szr_main.Fit(self) wx.EVT_CLOSE(self, self.OnClose)