コード例 #1
0
    def set_trace_level(self, flag, val, change_cb=True):
        """ Set trace level, changing Control button if requested
        :flag: - trace flag name
        :val: - value to set
        :change_cb: True(default) appropriately change the control
        """
        if flag not in self.data_by_flag:
            SlTrace.lg("set_trace_level(%s,%d) - flag has no check button" % (flag, val))
            return
         
        cb, flag, var = self.data_by_flag[flag]        
        if cb is None:
            SlTrace.lg("set_trace_level(%s,%d) - flag None check button" % (flag, val))
            return

        if change_cb and hasattr(cb, "select"):
            if val != 0:
                cb.select()
            else:
                cb.deselect()
                    
        SlTrace.lg("flag=%s, var=%s, val=%s" %(flag, var, val), "trace_flags")
        SlTrace.setLevel(flag, val)
            
        if self.change_call is not None:
            self.change_call(flag, val)
コード例 #2
0
if __name__ == '__main__':
    def report_change(flag, val, cklist=None):
        SlTrace.lg("changed: %s = %d" % (flag, val))
        new_val = SlTrace.getLevel(flag)
        SlTrace.lg("New val: %s = %d" % (flag, new_val))
        if cklist is not None:
            cklist.list_ckbuttons()
    
    root = Tk()
    SlTrace.set_mw(root)
    ###frame = Frame(root)
    ###frame.pack()
    SlTrace.setProps()
    SlTrace.setFlags("flag1=t,flag2=f,flag3=t,flag4=10, flag5=20. flag6=abc")
    threshold = 5
    SlTrace.setLevel("tint1", 5)
    end_level = 100
    quit_set = False
    def our_quit(flag=None):
        """ Test for traceButton
        :flag: flag arg
        """
        global quit_set
        if flag is None:
            flag = "TBD"
        SlTrace.lg(f"our_quit({flag})")
        SlTrace.report("Quitting Program")
        root.destroy
        quit_set = True
        sys.exit()
コード例 #3
0
ファイル: select_play_cmd.py プロジェクト: raysmith619/dots
    def do_stcmd(self, stcmd):
        """ Execute play command
        :stcmd: command (py)
        :returns: True if succesful
        """

        stcmd_name = stcmd.name
        if SlTrace.trace("stcmd_list"):
            SlTrace.lg("    %s" % (stcmd))

        if stcmd_name == "execute_file":
            file_name = self.get_arg(stcmd, 1, "")
            return self.play_control.cmd_stream.procFile(file_name)

        if stcmd_name.lower() == "eof":
            self.command_stream.set_eof()
            return True

        if stcmd_name == "lg":
            """ Version of Sl1Trace.lg(text[ flag_string})
            :args[0] text to log
            :args[1]: optional flag to enable logging default: log it
            """
            if len(stcmd.args) == 0:
                raise SelectError("Required text argument is missing")

            text = stcmd.args[0].str
            totrace = True  # Default - list
            if len(stcmd.args) >= 2:
                flag = stcmd.args[1].str
                if not SlTrace.trace(flag):
                    totrace = False
            if totrace:
                SlTrace.lg(text)

            return True

        if stcmd_name == "doc_string":
            return True

        if stcmd_name == "enter":
            return self.do_stcmd_enter(stcmd)

        if stcmd_name == "set_level":
            """ pgm version of SlTrace.set_level(flag, level)
            """
            if len(stcmd.args) >= 1:
                flag = stcmd.args[0].str
            else:
                raise SelectError("Missing set_level flag arg")

            if len(stcmd.args) >= 2:
                level = int(stcmd.args[1].str)
            else:
                level = 1

            SlTrace.setLevel(flag, level)
            return True

        if (stcmd_name == "up" or stcmd_name == "down" or stcmd_name == "left"
                or stcmd_name == "right" or stcmd_name == "plus"
                or stcmd_name == "minus"):
            res = self.stcmd_move_edge(stcmd)
            return res

        if stcmd_name == "help":  # Help
            SlTrace.lg("""
            space - Add multiline blank delimiter
            a - add delimiter with one line of text
            b - list blinking parts
            c - clear current part display
            d - (re)display current part
            f - rurn current part off
            h - Output this help listing
            i - list part, edges of current location
            j - List edge at current edge position
            k - cmds at top of cmd stack
            g - List on square(s) touching current edge
            l - List highlighted parts
            n - turn on current part
            
            r - redo undone command
            s - list selected parts
            t - list parts that are turned on
            v - set current edge
            Selection movement directions:
                UP
                Down
                Left
                Right
                "plus" - rotate selection clockwise
                "minus" - rotate selection counter clockwise
            ; - multi character command
             c[anvas] pattern - list canvas objects with tag "ALL" - all canvas objects
             p[part] pattern - List parts with tag, default all parts (one entry per part)
             r[ecord] pattern - Trace canvas rectangles with any tag matching pattern
             s[tart] number[current] - start(restart) looking at tracking number
             d[elete] pattern(default .*) delete canvas objects
             
             <cmd>[s]t=[<stack_length>][:<stack_bottom>]] Add stack listing
                 <stack_length> - number of levels listed default: 2
                 <stack_bottom> - bottom of stack listed (0-most recent) default: 2 above
                 Examples:  pt=5 - to parts add stack list of 5 levels
                             pt= - add default stack list to parts
                             pt=6:3 - add stack 6 levels, omitting 3 lowest levels
            """)
            return True

        if stcmd_name == "space":
            """ List separator
            :args[0]: optional annotation text if present
            """
            SlTrace.lg("_" * 50 + "\n\n\n")
            if len(stcmd.args) >= 1:
                SlTrace.lg(stcmd.args[0].str)
            return True

        if stcmd_name == "blinking":  # List "Blinking" parts
            self.list_blinking("blinking")
            return True

        if stcmd_name == "stack":  # cmds at top of stack
            self.play_control.command_manager.list_stack()

        if stcmd_name == "lighted":
            part_ids = list(self.play_control.board.area.highlights)
            SlTrace.lg("Highlighted parts(%d):" % len(part_ids))
            for part_id in part_ids:
                part = self.get_part(id=part_id)
                SlTrace.lg("    %s" % part)
            return True

        if stcmd_name == "select":
            return self.select(stcmd)

        if stcmd_name == "selected":  # List those selected
            self.list_selected()
            return True

        if stcmd_name == "turnedon":  # List those turned on
            part_ids = list(self.play_control.board.area.parts_by_id)
            n_on = 0
            for part_id in part_ids:
                part = self.get_part(id=part_id)
                if part.is_turned_on():
                    n_on += 1
            SlTrace.lg("parts turned on(%d of %d):" % (n_on, len(part_ids)))
            for part_id in part_ids:
                part = self.get_part(id=part_id)
                if part.is_turned_on():
                    SlTrace.lg("    %s" % part)
            return

        if stcmd_name == "set_edge":
            return self.do_stcmd("enter")

        if stcmd_name == "set_playing":
            return self.set_playing(stcmd)

        if stcmd_name == "set_player":
            return self.set_player(stcmd)

        if stcmd_name == "redo":
            nt = 1
            if stcmd.args:
                nt = int(stcmd.args[0].str)
            for i in range(nt):
                res = self.play_control.redo()
                if not res:
                    break
            return res

        if stcmd_name == "info":  # Do info on squares(regions) touching current edge
            edge = self.get_keycmd_edge()
            SlTrace.lg("%s" % edge.str_adjacents())
            return True

        if stcmd_name == "undo":
            nt = 1
            if stcmd.args:
                nt = int(stcmd.args[0].str)
            for i in range(nt):
                res = self.play_control.undo()
                if not res:
                    break
            return res

        if stcmd_name == "canvas":
            canvas = self.get_canvas()
            if len(stcmd.args) >= 1:
                pat = stcmd.args[0].str
            else:
                pat = ".*"
                items = canvas.get_tracked()
                matching_ids = []
                for item in items:
                    (rec_id, track_no, call_stack) = item
                    tags = canvas.gettags(rec_id)
                    for tag in tags:
                        if re.match(pat, tag):
                            matching_ids.append(rec_id)
                            break
                SlTrace.lg("canvas %s: %s" % (pat, matching_ids))
            return True

        if stcmd_name == "delete":
            canvas = self.get_canvas()
            if len(stcmd.args) >= 1:
                pat = stcmd.args[0].str
            else:
                pat = ".*"
            items = canvas.get_tracked()
            for item in items:
                (rec_id, track_no, call_stack) = item
                tags = canvas.gettags(rec_id)
                for tag in tags:
                    SlTrace.lg("tag:%s" % tag)
                    if re.match(pat, tag):
                        SlTrace.lg("deleting: %s: %s" % (tags, rec_id))
                        canvas.delete(rec_id)
                        break
            return True

        if stcmd_name == "parts":
            canvas = self.get_canvas()
            if len(stcmd.args) >= 1:
                pat = stcmd.args[0].str
            else:
                pat = ".*"
            items = canvas.get_tracked()
            matching_parts_by_id = {}
            for item in items:
                (rec_id, stack_no, stack) = item
                tags = canvas.gettags(rec_id)
                part = self.get_part_from_tags(tags)
                if part is None:
                    continue
                part_str = str(part)
                found = re.search(pat, part_str)
                if found:
                    part_item = (part, item)
                    if part.part_id not in matching_parts_by_id:
                        matching_parts_by_id[part.part_id] = [
                        ]  # Create list of tags
                    matching_parts_by_id[part.part_id].append(part_item)
            SlTrace.lg("parts pat:%s" % (pat))
            for part_id, part_item_list in matching_parts_by_id.items():
                part = self.get_part(part_id)
                SlTrace.lg("    %d (%d parts)" %
                           (part.part_id, len(part_item_list)))
                for part_item in part_item_list:
                    part, item = part_item
                    rec_id, track_no, stack = item
                    tags = canvas.gettags(rec_id)
                    pt = self.get_part_from_tags(tags)
                    SlTrace.lg("        %d %s %s" % (rec_id, track_no, pt))
                    if self.stack_trace:
                        rec_id, stack_no, stack = item
                        canvas.trace_item(prefix="        ",
                                          rec_id=rec_id,
                                          begin=self.stack_begin,
                                          end=self.stack_end)
            return True

        if stcmd_name == "parts":
            canvas = self.get_canvas()
            if len(stcmd.args) >= 1:
                pat = stcmd.args[0].str
            else:
                pat = ".*"
            items = canvas.get_tracked()
            return False  # TBD

        if stcmd_name == "rectangles":
            canvas = self.get_canvas()
            if len(stcmd.args) >= 1:
                pat = stcmd.args[0].str
            else:
                pat = ".*"
            items = canvas.get_tracked()
            for item in items:
                (rec_id, track_no, call_stack) = item
                tags = canvas.gettags(rec_id)
                for tag in tags:
                    if re.match(pat, tag):
                        canvas.trace_item(rec_id=rec_id)
                        break
            return True

        if stcmd_name == "set_start":
            canvas = self.get_canvas()
            if len(stcmd.args) >= 1:
                num = int(stcmd.args[0].str)
            else:
                num = self.get_start_track()
                canvas = self.get_canvas()

                SlTrace.lg("Track no set to: %d" % num)
                self.set_start_track(num)

            return True

        if stcmd_name == "stack":
            self.play_control.command_manager.list_stack()
            return True

        raise SelectError(f"Unsuported command {stcmd}")
        return False