Exemple #1
0
def UnloadPlugin(set, name):
    """
	Unloads the named plugin
	"""
    gb = gmGuiBroker.GuiBroker()
    plugin = gb['horstspace.notebook.%s' % set][name]
    plugin.unregister()
Exemple #2
0
    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()
Exemple #3
0
    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()
Exemple #4
0
 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
Exemple #5
0
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
Exemple #6
0
    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)
Exemple #7
0
    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)
Exemple #8
0
 def __init__(self):
     self.gb = gmGuiBroker.GuiBroker()
     self._set = 'gui'
     self._widget = None
     self.__register_events()
Exemple #9
0
    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)