C#ATIA

↑タイトル詐欺 主にFusion360API 偶にCATIA V5 VBA(絶賛ネタ切れ中)

D&Dで入れ替わるリストビュー3

こちらの続きです。
D&Dで入れ替わるリストビュー2 - C#ATIA
欲しかった動作が出来たような気がします。


左はいそのグループで、右はさくらグループです。
あぁ境界線ぐらい設けるべきでしたね。
お互いのグループ内での入れ替えはOKです。


しかし、いそのグループからさくらグループへは
移動と言いますか受け入れますが、
さくらグループからいそのグループへの
移動は禁止です。


つまり、入れ替えではなく侵略していきます。
非情と言いますか無慈悲と言いますか、よりによって
主人公から消し去るなんて・・・。
さくらグループに未来があるのでしょうか?

これを行うサンプルはこちらです。

# python using-flet
import flet as ft

class DragAndDropItem(ft.UserControl):
    def __init__(self, group: str, value: str, isDropOnly: bool = False):
        super().__init__()
        self.group = group
        self.vaule = value
        self.isDropOnly = isDropOnly

    def build(self):
        self.view = ft.Draggable(
            group = self.group,
            content = ft.DragTarget(
                group = self.group,
                content = ft.Text(
                    self.vaule,
                    size = 50,
                    data = self.isDropOnly #dataにドロップオンリーの印を付ける
                ),
                on_accept = self._drag_accept,
            )
        )
        return self.view

    def _drag_accept(self, e: ft.DragTargetAcceptEvent):
        '''
        ドラッグもドロップもOK
        '''
        src = e.page.get_control(e.src_id).content.content
        target = e.page.get_control(e.target).content

        if src.data == target.data:
            # お互いのタイプが一致
            target.value, src.value = src.value, target.value
        elif not src.data and target.data:
            # ドロップされる側がドロップオンリーの場合のみ受け入れる
            target.value = src.value

        src.update()
        target.update()

def main(page: ft.Page):

    page.title = "Drag and drop test"

    groupName = "test"

    isonoGrp = [
        "さざえ",
        "かつお",
        "わかめ",
        "たら",
    ]

    sakuraGrp = [
        "まるこ",
        "たま",
        "はまじ",
        "みぎわ",
    ]

    isonolistView = ft.ListView(
        expand=1,
        spacing=20,
        padding=20,
        auto_scroll = True
    )
    [isonolistView.controls.append(DragAndDropItem(groupName, t)) for t in isonoGrp]

    sakuralistView = ft.ListView(
        expand=1,
        spacing=20,
        padding=20,
        auto_scroll = True
    )
    [sakuralistView.controls.append(DragAndDropItem(groupName, t, True)) for t in sakuraGrp]

    page.add(
        ft.Row(
            controls=[
                isonolistView,
                sakuralistView,
            ]
        )
    )

    page.update()

ft.app(target = main)

お互い人類の夢 "不老不死" を手に入れたにも関わらず、
この様な運命となる事に心痛みます。
(本当は同一グループの入れ替えOKで、片側のD&Dは値の反映が
目的です)

恐るべし磯野家!(正しくは2名はフグ田家)