Code Duplication    Length = 27-28 lines in 4 locations

doorstop/gui/main.py 4 locations

@@ 582-609 (lines=28) @@
579
                    checkbox_normative.config(state=tk.DISABLED if item is None else tk.NORMAL)
580
                store.add_observer(lambda store: refreshCheckButtonNormative(store))
581
582
            if True:  # CheckBox heading
583
                checkbox_heading_var = tk.BooleanVar()
584
585
                def doChangeHeading() -> None:
586
                    state = store.state if store else None
587
                    session_selected_item_principal = state.session_selected_item_principal if state else None
588
                    project_tree = state.project_tree if state else None
589
                    try:
590
                        item = project_tree.find_item(session_selected_item_principal) if project_tree else None
591
                    except DoorstopError:
592
                        item = None
593
                    if item:
594
                        store.dispatch(Action_ChangeItemHeading(item, checkbox_heading_var.get()))
595
596
                checkbox_heading = widget.Checkbutton(frame, command=doChangeHeading, variable=checkbox_heading_var, text="Heading")
597
                checkbox_heading.grid(row=6, column=0, sticky=tk.W, **kw_gp)
598
599
                def refreshCheckButtonHeading(store: Optional[Store]) -> None:
600
                    state = store.state if store else None
601
                    session_selected_item_principal = state.session_selected_item_principal if state else None
602
                    project_tree = state.project_tree if state else None
603
                    try:
604
                        item = project_tree.find_item(session_selected_item_principal) if project_tree else None
605
                    except DoorstopError:
606
                        item = None
607
                    checkbox_heading_var.set(bool(item is not None and item.heading))
608
                    checkbox_heading.config(state=tk.DISABLED if item is None else tk.NORMAL)
609
                store.add_observer(lambda store: refreshCheckButtonHeading(store))
610
611
            if True:  # Listbox Links
612
                listbox_links = widget.Listbox(frame, width=width_uid, height=6, selectmode=tk.EXTENDED, exportselection=tk.OFF)
@@ 525-552 (lines=28) @@
522
                    checkbox_active.config(state=tk.DISABLED if item is None else tk.NORMAL)
523
                store.add_observer(lambda store: refreshCheckButtonActive(store))
524
525
            if True:  # CheckBox derived
526
                checkbox_derived_var = tk.BooleanVar()
527
528
                def doChangeDerived() -> None:
529
                    state = store.state if store else None
530
                    session_selected_item_principal = state.session_selected_item_principal if state else None
531
                    project_tree = state.project_tree if state else None
532
                    try:
533
                        item = project_tree.find_item(session_selected_item_principal) if project_tree else None
534
                    except DoorstopError:
535
                        item = None
536
                    if item:
537
                        store.dispatch(Action_ChangeItemDerived(item, checkbox_derived_var.get()))
538
539
                checkbox_derived = widget.Checkbutton(frame, command=doChangeDerived, variable=checkbox_derived_var, text="Derived")
540
                checkbox_derived.grid(row=4, column=0, sticky=tk.W, **kw_gp)
541
542
                def refreshCheckButtonDerived(store: Optional[Store]) -> None:
543
                    state = store.state if store else None
544
                    session_selected_item_principal = state.session_selected_item_principal if state else None
545
                    project_tree = state.project_tree if state else None
546
                    try:
547
                        item = project_tree.find_item(session_selected_item_principal) if project_tree else None
548
                    except DoorstopError:
549
                        item = None
550
                    checkbox_derived_var.set(bool(item is not None and item.derived))
551
                    checkbox_derived.config(state=tk.DISABLED if item is None else tk.NORMAL)
552
                store.add_observer(lambda store: refreshCheckButtonDerived(store))
553
554
            if True:  # CheckBox normative
555
                checkbox_normative_var = tk.BooleanVar()
@@ 554-580 (lines=27) @@
551
                    checkbox_derived.config(state=tk.DISABLED if item is None else tk.NORMAL)
552
                store.add_observer(lambda store: refreshCheckButtonDerived(store))
553
554
            if True:  # CheckBox normative
555
                checkbox_normative_var = tk.BooleanVar()
556
557
                def doChangeNormative() -> None:
558
                    state = store.state if store else None
559
                    session_selected_item_principal = state.session_selected_item_principal if state else None
560
                    project_tree = state.project_tree if state else None
561
                    try:
562
                        item = project_tree.find_item(session_selected_item_principal) if project_tree else None
563
                    except DoorstopError:
564
                        item = None
565
                    if item:
566
                        store.dispatch(Action_ChangeItemNormative(item, checkbox_normative_var.get()))
567
                checkbox_normative = widget.Checkbutton(frame, command=doChangeNormative, variable=checkbox_normative_var, text="Normative")
568
                checkbox_normative.grid(row=5, column=0, sticky=tk.W, **kw_gp)
569
570
                def refreshCheckButtonNormative(store: Optional[Store]) -> None:
571
                    state = store.state if store else None
572
                    session_selected_item_principal = state.session_selected_item_principal if state else None
573
                    project_tree = state.project_tree if state else None
574
                    try:
575
                        item = project_tree.find_item(session_selected_item_principal) if project_tree else None
576
                    except DoorstopError:
577
                        item = None
578
                    checkbox_normative_var.set(bool(item is not None and item.normative))
579
                    checkbox_normative.config(state=tk.DISABLED if item is None else tk.NORMAL)
580
                store.add_observer(lambda store: refreshCheckButtonNormative(store))
581
582
            if True:  # CheckBox heading
583
                checkbox_heading_var = tk.BooleanVar()
@@ 497-523 (lines=27) @@
494
            widget.Label(frame, text="Properties:").grid(row=2, column=0, sticky=tk.W, **kw_gp)
495
            widget.Label(frame, text="Links:").grid(row=2, column=1, columnspan=2, sticky=tk.W, **kw_gp)
496
497
            if True:  # CheckBox active
498
                checkbox_active_var = tk.BooleanVar()
499
500
                def doChangeActive() -> None:
501
                    state = store.state if store else None
502
                    session_selected_item_principal = state.session_selected_item_principal if state else None
503
                    project_tree = state.project_tree if state else None
504
                    try:
505
                        item = project_tree.find_item(session_selected_item_principal) if project_tree else None
506
                    except DoorstopError:
507
                        item = None
508
                    if item:
509
                        store.dispatch(Action_ChangeItemActive(item, checkbox_active_var.get()))
510
                checkbox_active = widget.Checkbutton(frame, command=doChangeActive, variable=checkbox_active_var, text="Active")
511
                checkbox_active.grid(row=3, column=0, sticky=tk.W, **kw_gp)
512
513
                def refreshCheckButtonActive(store: Optional[Store]) -> None:
514
                    state = store.state if store else None
515
                    session_selected_item_principal = state.session_selected_item_principal if state else None
516
                    project_tree = state.project_tree if state else None
517
                    try:
518
                        item = project_tree.find_item(session_selected_item_principal) if project_tree else None
519
                    except DoorstopError:
520
                        item = None
521
                    checkbox_active_var.set(bool(item is not None and item.active))
522
                    checkbox_active.config(state=tk.DISABLED if item is None else tk.NORMAL)
523
                store.add_observer(lambda store: refreshCheckButtonActive(store))
524
525
            if True:  # CheckBox derived
526
                checkbox_derived_var = tk.BooleanVar()