Пример #1
0
    def __init__(self, *args, **kwds):
        """ Constructor of RowPanel class"""

        kwdsnew = copy.copy(kwds)
        kwdsnew['style'] = wx.SIMPLE_BORDER | wx.TAB_TRAVERSAL
        cdml.CDMPanel.__init__(self, True, *args, **kwdsnew)  # initialize

        # Create variables using PopulationSet class and initialize those variables
        # using initial values defined in PopulationSet Class
        self.record = cdml.GetInstanceAttr(DB.PopulationSet)

        # Create temporary variable to keep input for DataColumns and Data
        self.DataColumns = []
        self.Data = []
        self.Objectives = []

        # Add Button and StaticText for deletion and status display
        self.btn_del = cdml.Button(self,
                                   wx.ID_DELETE,
                                   "x",
                                   style=wx.BU_EXACTFIT)
        self.st_status = wx.StaticText(self, -1, " ")

        # Create controls to enter/display the variables in Transition object
        # For controls include text area set wx.TE_NOHIDESEL always.
        # This style need for the Find function
        self.tc_name = cdml.Text(self, -1, "", style=wx.TE_NOHIDESEL)
        self.tc_definitiontype = cdml.Text(self,
                                           -1,
                                           "",
                                           style=wx.TE_NOHIDESEL,
                                           validator=cdml.KeyValidator(
                                               cdml.NO_EDIT))
        self.tc_source = cdml.Text(self, -1, "", style=wx.TE_NOHIDESEL)
        # keep the derived from status in addition to the text box
        self.DerivedFrom = 0
        self.tc_derived = cdml.Text(self,
                                    -1,
                                    "",
                                    style=wx.TE_NOHIDESEL,
                                    validator=cdml.KeyValidator(cdml.NO_EDIT))
        self.tc_created = cdml.Text(self,
                                    -1,
                                    "",
                                    validator=cdml.KeyValidator(cdml.NO_INPUT))
        self.tc_modified = cdml.Text(self,
                                     -1,
                                     "",
                                     validator=cdml.KeyValidator(
                                         cdml.NO_INPUT))
        self.tc_notes = cdml.Text(self,
                                  -1,
                                  "",
                                  style=wx.TE_MULTILINE | wx.TE_NOHIDESEL)

        #self.btn_copy = cdml.Button(self, cdml.IDP_BUTTON1, "Copy")
        self.btn_data = cdml.Button(self, cdml.IDP_BUTTON3, "Data")

        self.__set_properties()
        self.__do_layout()
Пример #2
0
    def __init__(self, *args, **kwds):
        """ Constructor of RowPanel class """

        kwdsnew = copy.copy(kwds)
        kwdsnew[
            "style"] = wx.SIMPLE_BORDER | wx.TAB_TRAVERSAL  # Set the style of RowPanel class
        cdml.CDMPanel.__init__(
            self, True, *args, **kwdsnew
        )  # Second parameter should be True always for any RowPanel class

        # Create variables using Param class and initialize those variables
        # using initial values defined in Param Class
        self.record = cdml.GetInstanceAttr(DB.Param)
        self.record.Name = ''

        # Button and hidden StaticText to display panel status
        self.btn_del = cdml.Button(self,
                                   wx.ID_DELETE,
                                   "x",
                                   style=wx.BU_EXACTFIT)
        self.st_status = wx.StaticText(self, -1, " ")

        # Create controls to enter/display the variables in Transition object
        # For controls include text area set wx.TE_NOHIDESEL always.
        # This style need for the Find function
        self.tc_name = cdml.Text(self, -1, "", style=wx.TE_NOHIDESEL)
        self.tc_formula = cdml.Text(self,
                                    -1,
                                    "",
                                    style=wx.TE_MULTILINE | wx.TE_NOHIDESEL)
        self.cc_type = cdml.Combo(self,
                                  -1,
                                  style=wx.TE_NOHIDESEL,
                                  validator=cdml.KeyValidator(cdml.NO_EDIT))
        self.tc_rule_parm = cdml.Text(self, -1, "", style=wx.TE_NOHIDESEL)
        self.tc_notes = cdml.Text(self,
                                  -1,
                                  "",
                                  style=wx.TE_MULTILINE | wx.TE_NOHIDESEL)

        self.__set_properties()
        self.__do_layout()
Пример #3
0
    def __init__(self,
                 mode=None,
                 data=None,
                 type=None,
                 id_prj=0,
                 *args,
                 **kwds):
        """ Constructor of the MainFrame class """
        self.idPrj = id_prj

        cdml.CDMFrame.__init__(self, mode, data, type, *args, **kwds)

        # Deine Popup menu items
        # Format : tuple of list --> ([Label, Event handler, Id] , [], [], ... )
        #           Label : label of an item
        #           Event handler : name of event handler
        #           Id : Id of current menu item
        # Special label : '-'--> separator, '+' --> submenu items
        #           First item after last '+' marked items is the title of the submenu
        # If an item doesn't have event handler, the second parameter should be 'None'
        # If an item doesn't have Id, the third item should be -1
        # If a form need to manage instances of RowPanel class,
        #   the event handler should be 'self.FrameEventHandler'
        # Otherwise, dedicated event handler should be implemented in that class (ex. see Project or PopulationData form)
        self.pup_menus = (["Undo", self.FrameEventHandler, wx.ID_UNDO], [
            "-", None, -1
        ], ["Add", self.FrameEventHandler,
            wx.ID_ADD], ["Delete", self.FrameEventHandler, wx.ID_DELETE], [
                "-", None, -1
            ], ["Find", self.FrameEventHandler, wx.ID_FIND], ["-", None, -1], [
                "+From State",
                self.FrameEventHandler, cdml.IDF_BUTTON4
            ], ["+To State", self.FrameEventHandler, cdml.IDF_BUTTON5
                ], ["+Probability", self.FrameEventHandler,
                    cdml.IDF_BUTTON6], ["Sort By", None, -1])

        # Define the window menus
        cdml.GenerateStandardMenu(self)

        # create panel for field titles
        # IMPORTANT NOTE:
        #   In current version, name of a panel for the title section should be "pn_title"
        #   And should be an instance of CDMPanel class with False as a first argument
        self.pn_title = cdml.CDMPanel(False, self, -1)
        self.st_title = wx.StaticText(self.pn_title, -1,
                                      "Transitions Between States in a Model")

        # Create text and combo control to display the list of studies and models
        # Due to this controls, two step initialization need to be implemented for Transition form
        # --> transition list could be set up after selecting a study or model using this combo control
        self.st_study_model = wx.StaticText(self.pn_title, -1, "Model")
        self.cc_study_model = cdml.Combo(self.pn_title,
                                         validator=cdml.KeyValidator(
                                             cdml.NO_EDIT))

        # Create bitmap buttons to display title of each field
        # Syntax : cdml.BitmapButton( parent, id, bitmap, label )
        # Don't need to set bitmap here. It will be assigned in the event handler when pressed
        # For the sort function, the labels need to be same with the variable name in database object
        self.button_1 = cdml.BitmapButton(self.pn_title, cdml.IDF_BUTTON1,
                                          None, "From State")
        self.button_2 = cdml.BitmapButton(self.pn_title, cdml.IDF_BUTTON2,
                                          None, "To State")
        self.button_3 = cdml.BitmapButton(self.pn_title, cdml.IDF_BUTTON3,
                                          None, "Probability")
        self.button_4 = cdml.BitmapButton(self.pn_title, cdml.IDF_BUTTON8,
                                          None, "Notes")

        # Create Add/Find buttons
        # Syntax : cdml.Button( parent, ID )
        # ID should be wx.ID_ADD for add button and wx.ID_FIND for find button in all forms
        self.btn_add = cdml.Button(self.pn_title, wx.ID_ADD)
        self.btn_find = cdml.Button(self.pn_title, wx.ID_FIND)
        self.btn_copy_from_model = cdml.Button(self.pn_title,
                                               cdml.IDF_BUTTON11,
                                               'Copy From Model')

        # Scroll window that the RowPanel objects will be placed
        # IMPORTANT NOTE:
        #   In current version, all forms that need to manage the instance(s) of RowPanel class
        #       should have an instance of wx.ScrolledWindow class.
        #   Also the name of the panel should be "pn_view"
        self.pn_view = wx.ScrolledWindow(self,
                                         -1,
                                         style=wx.SUNKEN_BORDER
                                         | wx.TAB_TRAVERSAL)

        self.__set_properties()
        self.__do_layout()

        # Assign event handler for the buttons in title section -- to check the focus change
        self.pn_title.Bind(wx.EVT_BUTTON,
                           self.FrameEventHandler,
                           id=cdml.IDF_BUTTON1,
                           id2=cdml.IDF_BUTTON8)
        self.btn_add.Bind(wx.EVT_BUTTON, self.FrameEventHandler)
        self.btn_find.Bind(wx.EVT_BUTTON, self.FrameEventHandler)
        self.btn_copy_from_model.Bind(
            wx.EVT_BUTTON, self.CopyTransitionsFromAnotherStudyModel)

        self.cc_study_model.Bind(wx.EVT_LEFT_UP, self.FrameEventHandler)
        self.cc_study_model.GetTextCtrl().Bind(wx.EVT_LEFT_UP,
                                               self.FrameEventHandler)
        # The next line was commented since it worked fine on windows yet did
        # not work on a Linux system. Therefore instead of handling the mouse
        # click we are looking at the selection of the item form the list. For
        # some reason this forces repainting of the screen. Yet since it works
        # on both Linux and Windows, this solution was a compromise
        # self.cc_study_model.Bind(wx.EVT_COMMAND_LEFT_CLICK, self.FrameEventHandler)
        self.cc_study_model.Bind(wx.EVT_LIST_ITEM_SELECTED,
                                 self.InitTransitions)

        self.InitTransitions()  # display existing data
Пример #4
0
    def __init__(self, id_model, *args, **kwds):
        """ Constructor of RowPanel class """

        kwdsnew = copy.copy(kwds)
        kwdsnew[
            'style'] = wx.SIMPLE_BORDER | wx.TAB_TRAVERSAL  # Set the style of RowPanel class
        cdml.CDMPanel.__init__(
            self, True, *args, **kwdsnew
        )  # Second parameter should be True always for any RowPanel class

        # Use userData to save ID of Study/Model
        self.userData = id_model

        # Create variables using Transition class and initialize those variables
        # using initial values defined in Transition Class
        self.record = cdml.GetInstanceAttr(DB.Transition)
        self.record.StudyModelID = self.userData

        # Button and hidden StaticText to display panel status
        self.btn_del = cdml.Button(self,
                                   wx.ID_DELETE,
                                   "x",
                                   style=wx.BU_EXACTFIT)
        self.st_status = wx.StaticText(self, -1, " ")

        # Create controls to enter/display the variables in Transition object
        # For controls include text area set wx.TE_NOHIDESEL always.
        # This style need for the Find function
        self.cc_state_from = cdml.Combo(self,
                                        cdml.IDP_BUTTON1,
                                        style=wx.TE_NOHIDESEL,
                                        validator=cdml.KeyValidator(
                                            cdml.NO_EDIT))
        self.cc_state_to = cdml.Combo(self,
                                      cdml.IDP_BUTTON2,
                                      style=wx.TE_NOHIDESEL,
                                      validator=cdml.KeyValidator(
                                          cdml.NO_EDIT))

        self.tc_probability = cdml.Text(self,
                                        cdml.IDP_BUTTON3,
                                        '',
                                        style=wx.TE_NOHIDESEL
                                        | wx.TE_MULTILINE)

        self.tc_notes = cdml.Text(self,
                                  -1,
                                  "",
                                  style=wx.TE_NOHIDESEL | wx.TE_MULTILINE)

        self.__set_properties()
        self.__do_layout()

        # Bind an event handler to check/display formulae for the parameters
        # self.Bind(wx.EVT_IDLE, self.CheckFormula)

        # To modify the state and parameters, assign event handles for some controls
        # Because focus management isn't need for the modification,
        # event handlers are assigned directly to the controls instead of the FrameEventHandler method in CDMFrame class
        #self.cc_state_from.GetTextCtrl().Bind(wx.EVT_LEFT_DCLICK, self.OnButtonDblClick )
        #self.cc_state_to.GetTextCtrl().Bind(wx.EVT_LEFT_DCLICK, self.OnButtonDblClick )
        self.tc_probability.Bind(wx.EVT_LEFT_DCLICK, self.OnButtonDblClick)
Пример #5
0
    def __init__(self, *args, **kwds):
        """ Constructor of RowPanel class """

        # Create instance of the CDMPanel class.
        kwdsnew = copy.copy(kwds)
        kwdsnew[
            'style'] = wx.SIMPLE_BORDER | wx.TAB_TRAVERSAL  # Set the style of this RowPanel class
        cdml.CDMPanel.__init__(
            self, is_row=True, *args,
            **kwdsnew)  # Second argument should be True always

        # Create variables using StudyModel class and initialize those variables
        # using initial values defined in StudyModel Class
        self.record = cdml.GetInstanceAttr(DB.StudyModel)

        # Create controls for each field in database
        # All controls are derived from controls in wxPython for CDM Project
        # Naming convention :
        # self.btn_ : Button or BitmapButton
        # self.cc_  : Combo control
        # self.lc_  : List control
        # self.tc_  : Text control
        # self.st_  : Static Text
        # self.cb_  : Checkbox

        # Button and hidden StaticText to display panel status
        self.btn_del = cdml.Button(
            self, wx.ID_DELETE, "x")  # Second argument should be wx.ID_DELETE
        self.st_status = wx.StaticText(self, -1, " ")

        # Create controls to enter/display the variables in StudyModel object
        # For controls include text area set wx.TE_NOHIDESEL always.
        # This style need for the Find function
        # wx.TE_MULTILINE means multi line text control
        self.tc_name = cdml.Text(self,
                                 -1,
                                 "",
                                 style=wx.TE_MULTILINE | wx.TE_NOHIDESEL)

        # Add validator to prevent certain type of keyboard input
        # Following line shows how to prevent string input (i.e. only allow numbers in this control)

        self.cc_main_proc = cdml.Combo(self,
                                       style=wx.TE_NOHIDESEL,
                                       validator=cdml.KeyValidator(
                                           cdml.NO_EDIT))

        # Following two lines show how to prevent keyboard input
        self.tc_created = cdml.Text(self,
                                    -1,
                                    "",
                                    validator=cdml.KeyValidator(cdml.NO_INPUT))
        self.tc_modified = cdml.Text(self,
                                     -1,
                                     "",
                                     validator=cdml.KeyValidator(
                                         cdml.NO_INPUT))

        self.DerivedFrom = 0
        self.tc_from = cdml.Text(self,
                                 -1,
                                 style=wx.TE_NOHIDESEL,
                                 validator=cdml.KeyValidator(cdml.NO_EDIT))
        self.tc_notes = cdml.Text(self,
                                  -1,
                                  "",
                                  style=wx.TE_MULTILINE | wx.TE_NOHIDESEL)

        self.btn_trans = cdml.Button(self, cdml.IDP_BUTTON1, "Transitions")
        #self.btn_copy = cdml.Button(self, cdml.IDP_BUTTON2, "Copy")

        # To modify the MainProcess, assign event handles for the combo control
        # Because modification will be done in the 'States' form (i.e. don't need to check the focus change ),
        # event handlers are assigned directly to the controls instead of the FrameEventHandler method in CDMFrame class
        self.cc_main_proc.GetTextCtrl().Bind(wx.EVT_LEFT_DCLICK,
                                             self.OnLeftDblClick)

        self.__set_properties()
        self.__do_layout()