예제 #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
파일: States.py 프로젝트: ilanderma/MIST
    def __init__(self, *args, **kwds):

        # 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 State class and initialize those variables
        # using initial values defined in State Class
        self.record = cdml.GetInstanceAttr(DB.State)

        # create controls
        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 State 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.cb_isSplit = cdml.Checkbox(self, -1, "")
        self.cb_isEvent = cdml.Checkbox(self, -1, "")
        self.cb_isTerminal = cdml.Checkbox(self, -1, "")
        self.cc_joiner_split = cdml.Combo(self,
                                          -1,
                                          validator=cdml.KeyValidator(
                                              cdml.NO_EDIT))
        self.tc_notes = cdml.Text(self,
                                  -1,
                                  "",
                                  style=wx.TE_MULTILINE | wx.TE_NOHIDESEL)
        self.lc_states = cdml.List(self,
                                   -1,
                                   style=wx.LC_REPORT | wx.SUNKEN_BORDER)
        self.cc_states = cdml.Combo(self,
                                    -1,
                                    validator=cdml.KeyValidator(cdml.NO_EDIT))

        arrow_up = cdml.getSmallUpArrowBitmap()  # arrow bitmap for buttons
        arrow_dn = cdml.getSmallDnArrowBitmap()

        # add buttons for child States
        self.btn_add_state = cdml.BitmapButton(self, -1, arrow_up)
        self.btn_del_state = cdml.BitmapButton(self, -1, arrow_dn)

        self.__set_properties()
        self.__do_layout()

        # Opening another instance of the form is currently disabled since
        # recursive opening of this form and updating a parent form according
        # to a modification performed with a child is not supported. However,
        # doing this from the list box is ok since the record is saved and
        # changing the data is not possible in the child form
        # self.cc_states.GetTextCtrl().Bind(wx.EVT_LEFT_DCLICK, self.OnLeftDblClick)
        self.lc_states.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self.OnLeftDblClick)
예제 #3
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()
예제 #4
0
파일: Project.py 프로젝트: ilanderma/MIST
    def __init__(self, mode=None, data=None, type=None, id_prj=0, *args, **kwds):

        kwdsnew = copy.copy(kwds)
        kwdsnew["style"] = wx.DEFAULT_FRAME_STYLE
        wx.Frame.__init__(self, *args, **kwdsnew)

        self.Collection = 'Projects'

        self.idPrj = data     # Current project id.
        self.typePrj = type # Current project type.

        self.HelpContext = self.typePrj

        # List to save simulation rules at each stage
        # stage 2 doesn't have rule, but added here for indexing
        # This list is used to maintain temporary rule data before saving
        self.SimRule = [[], [], [], []]

        # Create empty class to save initial value(s) of project variables
        self.record = cdml.GetInstanceAttr(DB.Project)

        self.curCtrl = None # Current control which is selected for opening of a form
        self.curPage = 0     # Variable to save current page(i.e. tab) number
        self.openMode = mode

        # reset the override population
        self.TempOverridePopulationSet = None

        # Deine Popup menu items
        # Format : tuple of list --> ([Label, Event handler, Id] , [], [], ... )
        #           Label : label of an item
        #           Evet handler : name of event handler
        #           Id : Id of current menu item
        # Special label : '-'--> seperator, '+' --> 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
        # In Project form dedicated event handler(OnMenuSelected) is being used
        # to deal with the button press event and focus change.
        self.pup_menus = (  ["Undo", self.OnUndo, wx.ID_UNDO ],
                            ["Copy Record" , self.OnMenuSelected, cdml.ID_MENU_COPY_RECORD],
                            ["Save" , self.OnMenuSelected, wx.ID_SAVE],
                            ["-" , None, -1],
                            ["Run Simulation" , self.OnMenuSelected, wx.ID_APPLY],
                            ["View Result" , self.OnMenuSelected, wx.ID_VIEW_DETAILS])

        # Define the window menus 
        cdml.GenerateStandardMenu(self, SkipItems = [cdml.ID_MENU_REPORT_ALL])

        self.panel_main = wx.Panel(self, -1)
        self.panel_common = wx.Panel(self.panel_main, -1)
        self.notebook = wx.Notebook(self.panel_main, -1, style=0)

        # title
        self.st_title = wx.StaticText(self.panel_main, -1, "Project Definition")

        # Common simulation information
        self.st_name = wx.StaticText(self.panel_common, -1, "Name : ")
        self.tc_name = cdml.Text(self.panel_common, -1, "")
        self.st_from = wx.StaticText(self.panel_common, -1, "Derived From : ")
        self.tc_from = cdml.Text(self.panel_common, -1, "", validator=cdml.KeyValidator(cdml.NO_EDIT))

        self.st_created = wx.StaticText(self.panel_common, -1, "Created On : ")
        self.tc_created = cdml.Text(self.panel_common, -1, "", validator=cdml.KeyValidator(cdml.NO_EDIT))
        self.st_modified = wx.StaticText(self.panel_common, -1, "Last Modified : ")
        self.tc_modified = cdml.Text(self.panel_common, -1, "", validator=cdml.KeyValidator(cdml.NO_EDIT))
        self.st_notes = wx.StaticText(self.panel_common, -1, "Notes : ")
        self.tc_notes = cdml.Text(self.panel_common, -1, "", style = wx.TE_MULTILINE)

        # reserved for future extension

        arrow_up = cdml.getSmallUpArrowBitmap() # arrow bitmap for buttons
        arrow_dn = cdml.getSmallDnArrowBitmap()

        self.btn_save = wx.Button(self.panel_main, wx.ID_SAVE)
        self.btn_copy = wx.Button(self.panel_main, cdml.ID_MENU_COPY_RECORD, "Copy")
        self.btn_undo = wx.Button(self.panel_main, wx.ID_UNDO)

        # simulation conditions
        self.panel_sim = wx.Panel(self.panel_main, -1)
        self.st_pset = wx.StaticText(self.panel_sim, -1, "Population Set : ")
        self.cc_pset = cdml.Combo(self.panel_sim, cdml.IDF_BUTTON1, validator=cdml.KeyValidator(cdml.NO_EDIT))
        self.st_simsteps = wx.StaticText(self.panel_sim, -1, "No. of Simulation Steps : ")
        self.tc_simsteps = cdml.Text(self.panel_sim, -1, "")
        self.st_model = wx.StaticText(self.panel_sim, -1, "Primary Model : ")
        self.cc_model = cdml.Combo(self.panel_sim, cdml.IDF_BUTTON2, validator=cdml.KeyValidator(cdml.NO_EDIT))
        self.st_repet = wx.StaticText(self.panel_sim, -1, "No. of Repetitions : ")
        self.tc_repet = cdml.Text(self.panel_sim, -1, "")

        self.btn_ed_pset = wx.Button(self.panel_sim, cdml.IDF_BUTTON3, "...")
        self.btn_ed_model = wx.Button(self.panel_sim, cdml.IDF_BUTTON4, "...")

        self.btn_run = wx.Button(self.panel_sim, wx.ID_APPLY, "Run Simulation")
        self.btn_result = wx.Button(self.panel_sim, wx.ID_VIEW_DETAILS, "View Result")
        self.btn_delete = wx.Button(self.panel_sim, wx.ID_CLEAR, "Delete Results")


        # create tabs for simulation stage
        self.nb_pane_0 = wx.Panel(self.notebook, 0)
        self.nb_pane_1 = wx.Panel(self.notebook, 1)
        self.nb_pane_2 = wx.Panel(self.notebook, 2)
        self.nb_pane_3 = wx.Panel(self.notebook, 3)

        
        # simulation stage 0 : initialization
        self.tab0_label = wx.StaticText(self.nb_pane_0, -1, "Initialize the simulation")
        self.tab0_list = cdml.List(self.nb_pane_0, -1, style=wx.LC_REPORT|wx.SUNKEN_BORDER|wx.LC_SINGLE_SEL)

        # simulation stage 1 - Pre state transition
        self.tab1_label = wx.StaticText(self.nb_pane_1, -1, "Pre-State Transition Rules")
        self.tab1_list = cdml.List(self.nb_pane_1, -1, style=wx.LC_REPORT|wx.SUNKEN_BORDER|wx.LC_SINGLE_SEL)

        # simulation stage 2
        self.tab2_label = wx.StaticText(self.nb_pane_2, -1, "Execute state transitions according to the primary model:", style=wx.ALIGN_CENTRE)
        self.tab2_st_model = wx.StaticText(self.nb_pane_2, -1, "")
        self.tab2_st_TraceBack = wx.StaticText(self.nb_pane_2, -1, "Pickled TraceBack Information for Reproducing simulation")
        self.tab2_tc_TraceBack = cdml.Text(self.nb_pane_2, -1, "", style = wx.TE_MULTILINE)
     
        # show the TraceBack fields only in Admin mode
        TraceBackIsVisible = cdml.GetAdminMode()
        self.tab2_st_TraceBack.Show(TraceBackIsVisible)
        self.tab2_tc_TraceBack.Show(TraceBackIsVisible)


        # simulation stage 3 - Post state transition
        self.tab3_label = wx.StaticText(self.nb_pane_3, -1, "Post-State Transition Rules")
        self.tab3_list = cdml.List(self.nb_pane_3, -1, style=wx.LC_REPORT|wx.SUNKEN_BORDER|wx.LC_SINGLE_SEL)


        # combo boxes
        self.panel_combo = wx.Panel(self.panel_main, -1)
        self.label_1 = wx.StaticText(self.panel_combo, -1, "Parameter")
        self.label_2 = wx.StaticText(self.panel_combo, -1, "Occurrence Probability")
        self.label_3 = wx.StaticText(self.panel_combo, -1, "Function")
        self.label_4 = wx.StaticText(self.panel_combo, -1, "Notes")

        self.combo_box_1 = cdml.Combo(self.panel_combo, cdml.IDP_BUTTON1)
        self.combo_box_2 = cdml.Combo(self.panel_combo, cdml.IDP_BUTTON2)
        self.combo_box_2.AllowInput = True
        self.combo_box_3 = cdml.Combo(self.panel_combo, cdml.IDP_BUTTON3)
        self.combo_box_3.AllowInput = True
        self.tc_notes_rule = cdml.Text(self.panel_combo, cdml.IDP_BUTTON4)


        # Up/Down arrow button, Cost and QoL Wizard button
        self.btn_up = wx.BitmapButton(self.panel_combo, wx.ID_ADD, arrow_up)
        self.btn_dn = wx.BitmapButton(self.panel_combo, wx.ID_DELETE, arrow_dn)


        # Bind common event handler for Project form
        self.Bind(wx.EVT_CONTEXT_MENU, self.OnPopupMenu) # Dedicated event handler for popup menu
        self.Bind(wx.EVT_CLOSE, self.OnMenuSelected)
        self.Bind(wx.EVT_END_PROCESS, self.OnRefresh)

        self.btn_save.Bind(wx.EVT_BUTTON, self.OnMenuSelected)
        self.btn_copy.Bind(wx.EVT_BUTTON, self.OnMenuSelected)
        self.btn_undo.Bind(wx.EVT_BUTTON, self.OnUndo)

        self.notebook.Bind(wx.EVT_NOTEBOOK_PAGE_CHANGED, self.OnPageChanged)

        self.btn_up.Bind(wx.EVT_BUTTON, self.ChangeSimulaionRules)
        self.btn_dn.Bind(wx.EVT_BUTTON, self.ChangeSimulaionRules)

        self.btn_run.Bind(wx.EVT_BUTTON, self.OnMenuSelected)
        self.btn_result.Bind(wx.EVT_BUTTON, self.OnMenuSelected)
        self.btn_delete.Bind(wx.EVT_BUTTON, self.OnMenuSelected)

        self.btn_ed_pset.Bind(wx.EVT_BUTTON, self.OnLeftDblClick)
        self.btn_ed_model.Bind(wx.EVT_BUTTON, self.OnLeftDblClick)

        self.cc_pset.GetTextCtrl().Bind(wx.EVT_LEFT_DCLICK, self.OnLeftDblClick)
        self.cc_model.GetTextCtrl().Bind(wx.EVT_LEFT_DCLICK, self.OnLeftDblClick)

        self.combo_box_1.GetTextCtrl().Bind(wx.EVT_LEFT_DCLICK, self.OnLeftDblClick)
        self.combo_box_2.GetTextCtrl().Bind(wx.EVT_LEFT_DCLICK, self.OnLeftDblClick)
        self.combo_box_3.GetTextCtrl().Bind(wx.EVT_LEFT_DCLICK, self.OnLeftDblClick)
        self.tc_notes_rule.Bind(wx.EVT_LEFT_DCLICK, self.OnLeftDblClick)

        self.__set_properties()
        self.__do_layout()

        # This method is different from the Initialize method of CDMFrame class
        # It is implemented in this module
        self.Initialize()
예제 #5
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)
예제 #6
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()