def deleteProps(self): """ Delete players properties from properties file in prepartation to delete the player """ player_prop_key = self.get_prop_key("") prop_keys = SlTrace.getPropKeys(startswith=player_prop_key) SlTrace.lg(f"deleteProps for {self}") for key in prop_keys: prop_value = SlTrace.getProperty(key, None) SlTrace.lg(f"{key}={prop_value}") SlTrace.deleteProperty(key)
def remove_props(self): """ Remove all properties for :player_infos: """ base_key = self.get_base_key(include_num=False) SlTrace.lg(f"remove_props: base_key={base_key}", "player_prop") if self.sect_name is None: base_pat = base_key + r'\d+' base_match = re.compile(base_pat) SlTrace.lg(f"base_pat={base_pat}", "player_prop") prop_keys = SlTrace.getPropKeys() for prop_key in prop_keys: if prop_key.startswith(base_key): if self.sect_name is None: m = base_match.match(prop_key) if m is None: continue # Not base: ...nnn SlTrace.lg(f"remove_props: key={prop_key}", "player_prop") SlTrace.deleteProperty(prop_key)
def get_ctl_default(self, value_type): """ Get control value from properties :value_type: - value data type None - int :returns: value, null if none """ if value_type is None: value_type = int if self.ctl_name_d is None: prop_keys = SlTrace.getPropKeys() pattern = ArrangeControl.CONTROL_NAME_PREFIX + r"\.(.*)" rpat = re.compile(pattern) name_d = {} ### TBD I need to think about what is going on here for prop_key in prop_keys: rmatch = re.match(rpat, prop_key) if rmatch: name = rmatch[1] prop_val = SlTrace.getProperty(prop_key) name_d[name] = prop_val self.ctl_name_d = name_d try: value_str = self.ctl_name_d[name_d] except: return None if value_type is str: return value_str if value_str == "": return None if value_type is int: return int(value_str) if value_type is float: return float(value_str) return value_str
def __init__(self, ctlbase=None, control_prefix=None, title=None, display=True): """ Display / Control of players :ctlbase: base control object values stored in properties file All values stored under "player_control.".<player_id> The player_id is constructed by replacing all sequences of [^a-zA-Z_0-9]+ by "_" in the player name to produce a legal properties file id string Value strings: id value type ------------ ------------- name string label string playing bool position int mV int color string (fill) voice bool help_play bool pause float auto bool level int steven float """ ###Toplevel.__init__(self, parent) self.ctlbase = ctlbase if control_prefix is None: control_prefix = self.CONTROL_NAME_PREFIX self.control_prefix = control_prefix """ Setup control names found in properties file Updated as new control entries are added """ prop_keys = SlTrace.getPropKeys() player_pattern = r'(?:\.(\w+))' pattern = (self.control_prefix + player_pattern + player_pattern) rpat = re.compile(pattern) self.players = {} # Dictionary of SelectPlayer self.cur_player = None # Current player # by name self.call_d = [] # Call back routines, if any for prop_key in prop_keys: rmatch = re.match(rpat, prop_key) if rmatch: player_match = rmatch[0] player_match_1 = rmatch[1] player_id = int(rmatch[1]) player_field = rmatch[2] prop_val = SlTrace.getProperty(prop_key) if player_id not in self.players: player = SelectPlayer(self, player_id) self.players[player_id] = player # New entry else: player = self.players[player_id] player_attr = rmatch[2] if player_attr == "move": player_attr = "position" if not hasattr(player, player_attr): raise SelectError( "Unrecognized player attribute %s in %s" % (player_attr, prop_key)) else: pat = getattr(player, player_attr) if isinstance(pat, float): player_val = float(prop_val) elif isinstance(pat, bool): pvl = prop_val.lower() if (pvl == "yes" or pvl == "y" or pvl == "1" or pvl == "true"): player_val = True elif (pvl == "no" or pvl == "n" or pvl == "0" or pvl == "false"): player_val = False else: raise SelectError( "Unrecognized boolean value (%s =) %s" % (player_attr, prop_val)) elif isinstance(pat, int): prop_val = float(prop_val) # incase n.0 player_val = int(prop_val) else: player_val = prop_val setattr(player, player_attr, player_val) if player_attr == "color": player.icolor = player.color elif player_attr == "color_bg": player.icolor2 = player.color_bg self.players[player_id] = player if title is None: title = "Player Control" self.title = title if display: self.control_display()
def __init__(self, ctlbase, title=None, change_call=None): """ Display / Control of figure :ctlbase: base control object :change_call: if present,called when control changes """ self.control_d = {} # name : (name, ctl_widget, default_value) self.call_d = {} # Call by name self.ctl_lists = {} # Control selection lists [current_index, selection_list] ###Toplevel.__init__(self, parent) self.ctlbase = ctlbase self.sar_max_duration = None # Track arrange color duration """ Setup control names found in properties file Updated as new control entries are added """ prop_keys = SlTrace.getPropKeys() pattern = ArrangeControl.CONTROL_NAME_PREFIX + r"\.(.*)" rpat = re.compile(pattern) name_d = {} ### TBD I need to think about what is going on here for prop_key in prop_keys: rmatch = re.match(rpat, prop_key) if rmatch: name = rmatch[1] prop_val = SlTrace.getProperty(prop_key) name_d[name] = prop_val self.ctl_name_d = name_d if title is None: title = "Arrange" self.change_control = change_call win_width = 500 win_height = 700 win_x0 = 100 win_y0 = 100 self.mw = Toplevel() win_setting = "%dx%d+%d+%d" % (win_width, win_height, win_x0, win_y0) self.mw.geometry(win_setting) self.mw.title(title) top_frame = Frame(self.mw) self.mw.protocol("WM_DELETE_WINDOW", self.delete_window) top_frame.pack(side="top", fill="both", expand=True) self.top_frame = top_frame controls_frame = Frame(top_frame) controls_frame.pack(side="top", fill="both", expand=True) self.controls_frame = controls_frame """ Window Setup """ win_label = Label(master=controls_frame, text="Window", anchor='w') win_label.pack(side="top", fill="both", expand=True) self.add_change_ctl(master=controls_frame, ctl_name="window_width", text="width", value=win_width) self.add_change_ctl(master=controls_frame, ctl_name="window_height", text="height", value=win_height) ###self.add_change_ctl(master=controls_frame, ctl_name="window_x0", text="x0", value=win_width*.1) ###self.add_change_ctl(master=controls_frame, ctl_name="window_y0", text="y0", value=win_height*.1) """ Figure Setup """ Label(master=controls_frame, text="") win_label.pack(side="top", fill="both", expand=True) win_label = Label(master=controls_frame, text="Figure", anchor='w') win_label.pack(side="top", fill="both", expand=True) self.add_change_ctl(master=controls_frame, ctl_name="figure_columns", text="columns", value=6) self.add_change_ctl(master=controls_frame, ctl_name="figure_rows", text="rows", value=5) self.add_change_ctl(master=controls_frame, ctl_name="figure_size", text="size", value=50, min_value=20, max_value=200) """ Color Selections """ Label(master=controls_frame, text="") win_label.pack(side="top", fill="both", expand=True) win_label = Label(master=controls_frame, text="Colors", anchor='w') win_label.pack(side="top", fill="both", expand=True) selection_list = self.set_list(ctl_name="color_spec", selection_list = ["frequency", "rgb", "bw", "rgb1prim", "rgb2prim"]) self.add_color_ctl(master=controls_frame, ctl_name="color_spec", text="specification", selection=selection_list, selection_default= "rgb") selection_list = self.set_list(ctl_name="color_prog", selection_list = ["random", "ascend", "descend"]) self.add_color_ctl(master=controls_frame, ctl_name="color_prog", text="progression", selection=selection_list, selection_default= "random") self.add_color_ctl(master=controls_frame, ctl_name="color_value", text="value") """ Rearrangement Selections """ Label(master=controls_frame, text="") win_label.pack(side="top", fill="both", expand=True) win_label = Label(master=controls_frame, text="Rearrange", anchor='w') win_label.pack(side="top", fill="both", expand=True) arrange_arranged_list = self.set_list(ctl_name="arrange_arranged", selection_list = ["square", "2x2", "3x3", "4x4", "row", "column"]) self.add_color_ctl(master=controls_frame, ctl_name="arrange_arranged", text="arranged", selection=arrange_arranged_list, selection_default= "square") arrange_extent_list = self.set_list(ctl_name="arrange_extent", selection_list = ["row", "column", "all"]) self.add_color_ctl(master=controls_frame, ctl_name="arrange_extent", text="extent", selection=arrange_extent_list, selection_default= "all") arrange_propagate_list = self.set_list(ctl_name="arrange_propagate", selection_list = ["ripple", "grow", "bubble", "ripple_horiz", "grow_horiz", "bubble_horiz"]) self.add_color_ctl(master=controls_frame, ctl_name="arrange_propagate", text="propagate", selection=arrange_propagate_list, selection_default= "grow") arrange_restore_list = self.set_list(ctl_name="arrange_restore", selection_list = ["random", "forward", "reverse"]) self.add_color_ctl(master=controls_frame, ctl_name="arrange_restore", text="restore", selection=arrange_restore_list, selection_default= "random") arrange_modify_list = self.set_list(ctl_name="arrange_modify", selection_list = ["replace", "switch", "darken"]) self.add_color_ctl(master=controls_frame, ctl_name="arrange_modify", text="modify", selection=arrange_modify_list, selection_default= "replace") self.add_change_ctl(master=controls_frame, ctl_name="arrange_time", text="time", value=1000, min_value=1000, max_value=1000) self.add_change_ctl(master=controls_frame, ctl_name="arrange_number", text="number", value=1, min_value=1, max_value=1) """ Major Time Step """ Label(master=controls_frame, text="") win_label.pack(side="top", fill="both", expand=True) win_label = Label(master=controls_frame, text="Time(msec)", anchor='w') win_label.pack(side="top", fill="both", expand=True) self.add_change_ctl(master=controls_frame, ctl_name="time_step", text="step", value=1000, min_value=1000, max_value=1000) run_pause_frame = Frame(top_frame) run_pause_frame.pack(side="top", fill="both", expand=True) self.run_pause_frame = run_pause_frame set_button = Button(master=run_pause_frame, text="Set", command=self.set) set_button.pack(side="left", expand=True) run_button = Button(master=run_pause_frame, text="Run", command=self.run) run_button.pack(side="left", expand=True) pause_button = Button(master=run_pause_frame, text="Pause", command=self.pause) pause_button.pack(side="left", expand=True) step_button = Button(master=run_pause_frame, text="Step", command=self.step) step_button.pack(side="left", expand=True) step_button = Button(master=run_pause_frame, text="StepDown", command=self.step_down) step_button.pack(side="left", expand=True) SlTrace.lg("End of TraceControl __init__")