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()
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)
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()
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()
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)
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()