コード例 #1
0
    def get_prop_val(self, name, default):
        """ Get property value as (string)
        :name: field name
        :default: default value, if not found
        :returns: "" if not found
        """
        prop_key = self.get_prop_key(name)
        prop_val = SlTrace.getProperty(prop_key)
        if prop_val is None or prop_val == "":
            return default
        if isinstance(default, bool):
            bv = str2bool(prop_val)
            return bv

        if isinstance(default, int):
            if prop_val == "":
                return 0
            try:
                prop_val = int(prop_val)
            except:
                try:
                    prop_val = float(prop_val)
                except:
                    prop_val = 0

            return int(prop_val)

        if isinstance(default, float):
            if prop_val == "":
                return 0.

            return float(prop_val)
        else:
            return prop_val
コード例 #2
0
 def make_val(self, name, default=None, repeat=False, textvar=False):
     """ Create field, if not present, returning value
     :name: field name
     :default: value used if field not present
     :repeat: True->allow repeats default: False
     :textvar: True - create text field variable for widjets such as Entry etc.
     :returns: value set
     """
     if default is None:
         raise SelectError(f"make_val[{name}] REQUIRED default is Missing")
     if name in self.vals:
         if not repeat:
             raise SelectError(f"name: {name} already made")
     
     else:
         self.ctls_vars[name] = self.content_var(type(default))
         self.vals[name] = default
     prop_key = self.get_prop_key(name)
     prop_val = SlTrace.getProperty(prop_key, default=None)
     if prop_val is None:
         val = default
     else:
         tpd = type(default)
         if tpd is str:
             val = prop_val            # Keep the string
         elif tpd is bool:
             val = str2bool(prop_val)
         else:
             val = tpd(prop_val)         # Just cast it
     self.set_val(name, val)
     if textvar:
         self.ctls_textvars[name] = StringVar()
         self.ctls_textvars[name].set(val)
     return val
コード例 #3
0
ファイル: sc_score_window.py プロジェクト: raysmith619/dots
 def get_prop_val(self, name, default):
     """ Get property value as (string)
     :name: field name
     :default: default value, if not found
     :returns: "" if not found
     """
     prop_key = self.get_prop_key(name)
     prop_val = SlTrace.getProperty(prop_key)
     if prop_val is None:
         return default
     
     if isinstance(default, bool):
         if prop_val == "1" or prop_val.lower() == "true":
             return True
         return False
     
     if isinstance(default, int):
         if prop_val == "":
             return 0
        
         return int(prop_val)
     elif isinstance(default, float):
         if prop_val == "":
             return 0.
        
         return float(prop_val)
     else:
         return prop_val
コード例 #4
0
ファイル: select_player.py プロジェクト: raysmith619/dots
 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)
コード例 #5
0
    def make_val(self,
                 name,
                 default=None,
                 repeat=False,
                 textvar=False,
                 entry_type=None,
                 label=None):
        """ Create field, if not present, returning value
        :name: field name
        :default: value used if field not present
        :repeat: True->allow repeats default: False
        :textvar: True - create text field variable for widjets such as Entry etc.
        :entry_type: entry type: "std" standard variable
                                "label" display label
                                "internal" internal variable
        :label: Entry label text, default: use name
        :returns: value set
        """
        if default is None:
            raise SelectError(f"make_val[{name}] REQUIRED default is Missing")

        if name in self.vals:
            if not repeat:
                raise SelectError(f"name: {name} already made")
        if label is None:
            label = name
        self.entry_labels[name] = label

        if entry_type is None:
            entry_type = "std"

        if name not in self.vals:
            self.entry_types[name] = entry_type
            self.name_by_no.append(name)
            self.entry_no = len(self.name_by_no)
            self.ctls_vars[name] = self.content_var(type(default))
            self.vals[name] = default
        prop_key = self.get_prop_key(name)
        prop_val = SlTrace.getProperty(prop_key, default=None)
        if prop_val is None:
            val = default
        else:
            tpd = type(default)
            if tpd is str:
                val = prop_val  # Keep the string
            elif tpd is bool:
                val = str2bool(prop_val)
            else:
                val = tpd(prop_val)  # Just cast it
        self.set_val(name, val)
        if textvar:
            self.ctls_textvars[name] = StringVar()
            self.ctls_textvars[name].set(val)
        return val
コード例 #6
0
 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     
コード例 #7
0
    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()
コード例 #8
0
    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__")