Skip to content

table_view

build_table_view_preview_widget()

Build test UI with one AYTableView per variant.

Source code in ui_preview/table_view.py
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
def build_table_view_preview_widget() -> QtWidgets.QWidget:
    """Build test UI with one AYTableView per variant."""

    container = AYContainer(
        variant=AYContainer.Variants.High,
        layout=AYContainer.Layout.VBox,
        layout_margin=20,
        layout_spacing=10,
    )

    # label + hierarchy switch
    top_bar = AYContainer(
        variant=AYContainer.Variants.High,
        layout=AYContainer.Layout.HBox,
    )
    label = QtWidgets.QLabel("variant: tree mode (hierarchical)")
    switch = AYCheckBox(
        "Show Hierarchy", variant=AYCheckBox.Variants.Button
    )
    top_bar.add_widget(label)
    top_bar.add_widget(switch)
    container.add_widget(top_bar)

    # define model — "actions" column uses a widget factory
    tree_columns = [
        TableColumn("thumb", "Thumbnail", width=75, sortable=False),
        TableColumn(
            "name", "Name", width=160, sortable=True, tree_position=True
        ),
        TableColumn("status", "Status", width=100, sortable=True),
        TableColumn("type", "Type", width=100, sortable=True),
        TableColumn("author", "Author", width=100, sortable=False),
        TableColumn("version", "Version", width=70, sortable=True),
        TableColumn(
            "actions",
            "Actions",
            width=90,
            sortable=False,
            widget_factory=_make_button_factory("Open"),
        ),
    ]
    tree_fetch = make_hierarchical_test_fetch(HIERARCHICAL_TEST_DATA)
    tree_model = PaginatedTableModel(
        fetch_page=tree_fetch,
        columns=tree_columns,
        page_size=50,
    )
    tree_model.set_tree_mode(False)

    # define view
    tree_view = AYTableView(variant=AYTableView.Variants.Low)
    tree_view.setModel(tree_model)
    tree_view.setMinimumHeight(280)
    container.add_widget(tree_view)
    switch.toggled.connect(tree_model.set_tree_mode)

    tree_view.selection_changed.connect(
        lambda selected, deselected, tv=tree_view: print(
            "selection changed: "
            f"Selected {[i.data() for i in selected.indexes()]} "
            f"and deselected {[i.data() for i in deselected.indexes()]}) "
            f"(full selection: {[i.data() for i in tv.selectedIndexes()]})"
        )
    )

    container.setMinimumWidth(700)
    return container