234 def _apply(mask, is_neg):
236 QView._glb_filter &= ~mask
238 QView._glb_filter |= mask
240 QView._glb_filter = 0
245 if isinstance(arg, str):
246 is_neg = arg[0] ==
'-'
250 arg = QSpy._QS.index(arg)
254 traceback.format_exc(3))
262 _apply(1 << arg, is_neg)
263 elif arg == QView.GRP_ON:
264 _apply(QSpy._GLB_FLT_MASK_ALL, is_neg)
265 elif arg == QView.GRP_SM:
266 _apply(QSpy._GLB_FLT_MASK_SM, is_neg)
267 elif arg == QView.GRP_AO:
268 _apply(QSpy._GLB_FLT_MASK_AO, is_neg)
269 elif arg == QView.GRP_MP:
270 _apply(QSpy._GLB_FLT_MASK_MP, is_neg)
271 elif arg == QView.GRP_EQ:
272 _apply(QSpy._GLB_FLT_MASK_EQ, is_neg)
273 elif arg == QView.GRP_TE:
274 _apply(QSpy._GLB_FLT_MASK_TE, is_neg)
275 elif arg == QView.GRP_QF:
276 _apply(QSpy._GLB_FLT_MASK_QF, is_neg)
277 elif arg == QView.GRP_SC:
278 _apply(QSpy._GLB_FLT_MASK_SC, is_neg)
279 elif arg == QView.GRP_SEM:
280 _apply(QSpy._GLB_FLT_MASK_SEM, is_neg)
281 elif arg == QView.GRP_MTX:
282 _apply(QSpy._GLB_FLT_MASK_MTX, is_neg)
283 elif arg == QView.GRP_U0:
284 _apply(QSpy._GLB_FLT_MASK_U0, is_neg)
285 elif arg == QView.GRP_U1:
286 _apply(QSpy._GLB_FLT_MASK_U1, is_neg)
287 elif arg == QView.GRP_U2:
288 _apply(QSpy._GLB_FLT_MASK_U2, is_neg)
289 elif arg == QView.GRP_U3:
290 _apply(QSpy._GLB_FLT_MASK_U3, is_neg)
291 elif arg == QView.GRP_U4:
292 _apply(QSpy._GLB_FLT_MASK_U4, is_neg)
293 elif arg == QView.GRP_UA:
294 _apply(QSpy._GLB_FLT_MASK_UA, is_neg)
296 assert 0, f
"invalid global filter arg=0x{arg:02x}"
298 QSpy._sendTo(pack(
"<BBQQ", QSpy._TRGT_GLB_FILTER, 16,
299 QView._glb_filter & 0xFFFFFFFFFFFFFFFF,
300 QView._glb_filter >> 64))
499 Tk.report_callback_exception = QView._trap_error
502 main_menu = Menu(root, tearoff=0)
503 root.config(menu=main_menu)
506 m = Menu(main_menu, tearoff=0)
507 m.add_command(label=
"Save QSPY Dictionaries",
508 command=QView._onSaveDict)
509 m.add_command(label=
"Toggle QSPY Text Output",
510 command=QView._onSaveText)
511 m.add_command(label=
"Toggle QSPY Binary Output",
512 command=QView._onSaveBin)
513 m.add_command(label=
"Toggle Matlab Output",
514 command=QView._onSaveMatlab)
515 m.add_command(label=
"Toggle Sequence Output",
516 command=QView._onSaveSequence)
518 m.add_command(label=
"Exit", command=QView._quit)
519 main_menu.add_cascade(label=
"File", menu=m)
522 m = Menu(main_menu, tearoff=0)
523 QView._view_canvas = IntVar()
524 QView._view_frame = IntVar()
525 m.add_checkbutton(label=
"Canvas", variable=QView._view_canvas,
526 command=QView._onCanvasView)
527 m.add_checkbutton(label=
"Frame", variable=QView._view_frame,
528 command=QView._onFrameView)
529 main_menu.add_cascade(label=
"View", menu=m)
532 m = Menu(main_menu, tearoff=0)
533 m.add_command(label=
"SM Group...", accelerator=
"[NONE]",
534 command=QView._onGlbFilter_SM)
535 m.add_command(label=
"AO Group...", accelerator=
"[NONE]",
536 command=QView._onGlbFilter_AO)
537 m.add_command(label=
"QF Group...", accelerator=
"[NONE]",
538 command=QView._onGlbFilter_QF)
539 m.add_command(label=
"TE Group...", accelerator=
"[NONE]",
540 command=QView._onGlbFilter_TE)
541 m.add_command(label=
"MP Group...", accelerator=
"[NONE]",
542 command=QView._onGlbFilter_MP)
543 m.add_command(label=
"EQ Group...", accelerator=
"[NONE]",
544 command=QView._onGlbFilter_EQ)
545 m.add_command(label=
"SC Group...", accelerator=
"[NONE]",
546 command=QView._onGlbFilter_SC)
547 m.add_command(label=
"SEM Group...", accelerator=
"[NONE]",
548 command=QView._onGlbFilter_SEM)
549 m.add_command(label=
"MTX Group...", accelerator=
"[NONE]",
550 command=QView._onGlbFilter_MTX)
552 m.add_command(label=
"U0 Group...", accelerator=
"[NONE]",
553 command=QView._onGlbFilter_U0)
554 m.add_command(label=
"U1 Group...", accelerator=
"[NONE]",
555 command=QView._onGlbFilter_U1)
556 m.add_command(label=
"U2 Group...", accelerator=
"[NONE]",
557 command=QView._onGlbFilter_U2)
558 m.add_command(label=
"U3 Group...", accelerator=
"[NONE]",
559 command=QView._onGlbFilter_U3)
560 m.add_command(label=
"U4 Group...", accelerator=
"[NONE]",
561 command=QView._onGlbFilter_U4)
562 main_menu.add_cascade(label=
"Global-Filters", menu=m)
563 QView._menu_glb_filter = m
566 m = Menu(main_menu, tearoff=0)
567 m.add_command(label=
"AO IDs...", accelerator=
"[NONE]",
568 command=QView._onLocFilter_AO)
569 m.add_command(label=
"EP IDs...", accelerator=
"[NONE]",
570 command=QView._onLocFilter_EP)
571 m.add_command(label=
"EQ IDs...", accelerator=
"[NONE]",
572 command=QView._onLocFilter_EQ)
573 m.add_command(label=
"AP IDs...", accelerator=
"[NONE]",
574 command=QView._onLocFilter_AP)
576 m.add_command(label=
"AO-OBJ...", command=QView._onLocFilter_AO_OBJ)
577 main_menu.add_cascade(label=
"Local-Filters", menu=m)
578 QView._menu_loc_filter = m
581 m = Menu(main_menu, tearoff=0)
582 m.add_command(label=
"SM_OBJ", command=QView._onCurrObj_SM)
583 m.add_command(label=
"AO_OBJ", command=QView._onCurrObj_AO)
584 m.add_command(label=
"MP_OBJ", command=QView._onCurrObj_MP)
585 m.add_command(label=
"EQ_OBJ", command=QView._onCurrObj_EQ)
586 m.add_command(label=
"TE_OBJ", command=QView._onCurrObj_TE)
587 m.add_command(label=
"AP_OBJ", command=QView._onCurrObj_AP)
589 m1 = Menu(m, tearoff=0)
590 m1.add_command(label=
"SM_OBJ", command=QView._onQueryCurr_SM)
591 m1.add_command(label=
"AO_OBJ", command=QView._onQueryCurr_AO)
592 m1.add_command(label=
"MP_OBJ", command=QView._onQueryCurr_MP)
593 m1.add_command(label=
"EQ_OBJ", command=QView._onQueryCurr_EQ)
594 m1.add_command(label=
"TE_OBJ", command=QView._onQueryCurr_TE)
595 m1.add_command(label=
"AP_OBJ", command=QView._onQueryCurr_AP)
596 m.add_cascade(label=
"Query Current", menu=m1)
597 main_menu.add_cascade(label=
"Current-Obj", menu=m)
598 QView._menu_curr_obj = m
601 m = Menu(main_menu, tearoff=0)
602 m.add_command(label=
"Reset Target", command=QView.reset_target)
603 m.add_command(label=
"Query Target Info", command=QView._onTargetInfo)
604 m.add_command(label=
"Tick[0]", command=QView._onTick0)
605 m.add_command(label=
"Tick[1]", command=QView._onTick1)
608 m.add_command(label=
"Clear QSPY Screen", command=QView._onClearQspy)
612 main_menu.add_cascade(label=
"Commands", menu=m)
613 QView._menu_commands = m
616 m = Menu(main_menu, tearoff=0)
617 m.add_command(label=
"Publish...", command=QView._onEvt_PUBLISH)
618 m.add_command(label=
"Post...", command=QView._onEvt_POST)
619 m.add_command(label=
"Init SM", command=QView._onEvt_INIT)
620 m.add_command(label=
"Dispatch...", command=QView._onEvt_DISPATCH)
621 main_menu.add_cascade(label=
"Events", menu=m)
622 QView._menu_events = m
625 m = Menu(main_menu, tearoff=0)
627 main_menu.add_cascade(label=
"Custom", menu=m)
628 QView.custom_menu = m
631 m = Menu(main_menu, tearoff=0)
632 m.add_command(label=
"Online Help", command=QView._onHelp)
634 m.add_command(label=
"About...", command=QView._onAbout)
635 main_menu.add_cascade(label=
"Help", menu=m)
638 QView._scroll_text = IntVar()
639 QView._scroll_text.set(1)
640 QView._echo_text = IntVar()
641 QView._echo_text.set(0)
642 frame = Frame(root, borderwidth=1, relief=
"raised")
643 QView._target = Label(frame, height=2,
644 text=
"Target: " + QSpy._fmt_target)
645 QView._target.pack(side=
"left")
646 c = Checkbutton(frame, text=
"Scroll", variable=QView._scroll_text)
648 c = Checkbutton(frame, text=
"Echo", variable=QView._echo_text,
649 command=QSpy._reattach)
651 QView._tx = Label(frame, width=6, anchor=E,
652 borderwidth=1, relief=
"sunken")
653 QView._tx.pack(side=
"right")
654 Label(frame, text=
"Tx ").pack(side=
"right")
655 QView._rx = Label(frame, width=8, anchor=E,
656 borderwidth=1, relief=
"sunken")
657 QView._rx.pack(side=
"right")
658 Label(frame, text=
"Rx ").pack(side=
"right")
659 frame.pack(side=
"bottom", fill=
"x", pady=0)
662 frame = Frame(root, borderwidth=1, relief=
"sunken")
663 scrollbar = Scrollbar(frame)
664 QView._text = Text(frame, width=100, height=30,
665 wrap=
"word", yscrollcommand=scrollbar.set)
666 QView._text.bind(
"<Key>",
lambda e:
"break")
667 scrollbar.config(command=QView._text.yview)
668 scrollbar.pack(side=
"right", fill=
"y")
669 QView._text.pack(side=
"left", fill=
"both", expand=
True)
670 frame.pack(side=
"left", fill=
"both", expand=
True)
673 QView._canvas_toplevel = Toplevel()
674 QView._canvas_toplevel.withdraw()
675 QView._canvas_toplevel.protocol(
"WM_DELETE_WINDOW",
676 QView._onCanvasClose)
677 QView._canvas_toplevel.title(
"QView -- Canvas")
678 QView.canvas = Canvas(QView._canvas_toplevel)
682 QView._frame_toplevel = Toplevel()
683 QView._frame_toplevel.withdraw()
684 QView._frame_toplevel.protocol(
"WM_DELETE_WINDOW",
686 QView._frame_toplevel.title(
"QView -- Frame")
687 QView.frame = Frame(QView._frame_toplevel)
691 QView._locAO_OBJ = StringVar()
692 QView._currObj = (StringVar(), StringVar(), StringVar(),
693 StringVar(), StringVar(), StringVar())
694 QView._command = StringVar()
695 QView._command_p1 = StringVar()
696 QView._command_p2 = StringVar()
697 QView._command_p3 = StringVar()
698 QView._note = StringVar()
699 QView._note_kind = StringVar(value=0)
700 QView._peek_offs = StringVar()
701 QView._peek_dtype = StringVar(value=QView._dtypes[2])
702 QView._peek_len = StringVar()
703 QView._poke_offs = StringVar()
704 QView._poke_dtype = StringVar(value=QView._dtypes[2])
705 QView._poke_data = StringVar()
706 QView._evt_act = StringVar()
707 QView._evt_sig = StringVar()
708 QView._evt_par = (StringVar(), StringVar(), StringVar(),
709 StringVar(), StringVar(), StringVar(),
710 StringVar(), StringVar(), StringVar())
711 QView._evt_dtype = (StringVar(), StringVar(), StringVar(),
712 StringVar(), StringVar(), StringVar(),
713 StringVar(), StringVar(), StringVar())
714 for i
in range(len(QView._evt_par)):
715 QView._evt_dtype[i].set(QView._dtypes[2])
774 def _update_glb_filter_menu(label, mask):
775 x = QView._glb_filter & mask
782 QView._menu_glb_filter.entryconfig(label,
786 def _update_loc_filter_menu(label, mask):
787 x = QView._loc_filter & mask
794 QView._menu_loc_filter.entryconfig(label,
797 for i, e
in enumerate(QView._currObj):
798 QView._menu_curr_obj.entryconfig(i,
799 accelerator=QView._currObj[i].get())
800 QView._menu_events.entryconfig(0,
801 accelerator=QView._currObj[QView.OBJ_AO].get())
802 QView._menu_events.entryconfig(1,
803 accelerator=QView._currObj[QView.OBJ_AO].get())
804 QView._menu_events.entryconfig(2,
805 accelerator=QView._currObj[QView.OBJ_SM].get())
806 QView._menu_events.entryconfig(3,
807 accelerator=QView._currObj[QView.OBJ_SM].get())
808 QView._menu_commands.entryconfig(8,
809 accelerator=QView._currObj[QView.OBJ_AP].get())
810 QView._menu_commands.entryconfig(9,
811 accelerator=QView._currObj[QView.OBJ_AP].get())
815 if QView._currObj[QView.OBJ_SM].get() ==
"":
816 state_SM =
"disabled"
817 if QView._currObj[QView.OBJ_AO].get() ==
"":
818 state_AO =
"disabled"
819 if QView._currObj[QView.OBJ_AP].get() ==
"":
821 QView._menu_events.entryconfig(0, state=state_AO)
822 QView._menu_events.entryconfig(1, state=state_AO)
823 QView._menu_events.entryconfig(2, state=state_SM)
824 QView._menu_events.entryconfig(3, state=state_SM)
825 QView._menu_commands.entryconfig(8, state=state_AP)
826 QView._menu_commands.entryconfig(9, state=state_AP)
828 _update_glb_filter_menu(
"SM Group...", QSpy._GLB_FLT_MASK_SM)
829 _update_glb_filter_menu(
"AO Group...", QSpy._GLB_FLT_MASK_AO)
830 _update_glb_filter_menu(
"QF Group...", QSpy._GLB_FLT_MASK_QF)
831 _update_glb_filter_menu(
"TE Group...", QSpy._GLB_FLT_MASK_TE)
832 _update_glb_filter_menu(
"MP Group...", QSpy._GLB_FLT_MASK_MP)
833 _update_glb_filter_menu(
"EQ Group...", QSpy._GLB_FLT_MASK_EQ)
834 _update_glb_filter_menu(
"SC Group...", QSpy._GLB_FLT_MASK_SC)
835 _update_glb_filter_menu(
"SEM Group...", QSpy._GLB_FLT_MASK_SEM)
836 _update_glb_filter_menu(
"MTX Group...", QSpy._GLB_FLT_MASK_MTX)
837 _update_glb_filter_menu(
"U0 Group...", QSpy._GLB_FLT_MASK_U0)
838 _update_glb_filter_menu(
"U1 Group...", QSpy._GLB_FLT_MASK_U1)
839 _update_glb_filter_menu(
"U2 Group...", QSpy._GLB_FLT_MASK_U2)
840 _update_glb_filter_menu(
"U3 Group...", QSpy._GLB_FLT_MASK_U3)
841 _update_glb_filter_menu(
"U4 Group...", QSpy._GLB_FLT_MASK_U4)
843 _update_loc_filter_menu(
"AO IDs...", QSpy._LOC_FLT_MASK_AO)
844 _update_loc_filter_menu(
"EP IDs...", QSpy._LOC_FLT_MASK_EP)
845 _update_loc_filter_menu(
"EQ IDs...", QSpy._LOC_FLT_MASK_EQ)
846 _update_loc_filter_menu(
"AP IDs...", QSpy._LOC_FLT_MASK_AP)
847 QView._menu_loc_filter.entryconfig(
"AO-OBJ...",
848 accelerator=QView._locAO_OBJ.get())