我希望能够对列表框中的列表进行重新排序,最好是通过拖放(这似乎不可能)或使用按钮。我正在寻找 JSL 的向上和向下按钮。
更大的目标是获取目录中的所有文件,根据文件扩展名将它们分成两个列表。向用户显示两个列表,允许他们对文件重新排序,以便配对匹配。点击“确定”即可从 2 个列表框中获取文件名列表,并成对执行代码。我只需要帮助重新排序列表框中的列表。
这是一个非常快速的按钮版本(从Column Quick Swapper 修改 - 在 Graph Builder 中轻松更改多个 Y 和 X 轴列)
Names Default To Here(1);
move_items = function({lb_ref, direction}, {Default Local},
all_items = lb_ref << Get Items;
sel_items = lb_ref << Get Selected;
If(direction == "Swap",
item_order = Transform Each({sel_item}, sel_items,
Contains(all_items, sel_item)
);
new_order = all_items;
new_order[item_order] = Reverse(sel_items);
,
start_idx = Contains(all_items, sel_items[1]); // set based first found item
new_list = Filter Each({cur_item}, all_items, !Contains(sel_items, cur_item));
new_idx = If(direction == "Up",
start_idx - 1;
, direction == "Down",
start_idx + 1
,
start_idx
);
new_order = Insert(new_list, sel_items, new_idx);
);
lb_ref << Set Items(new_order);
all_items = lb_ref << Get Items;
For Each({cur_item}, sel_items,
new_idx = Contains(all_items, cur_item);
lb_ref << Set Selected(new_idx, 1, Run Script(0));
);
);
nw = New Window("Example",
H List Box(
lb_ref = List Box(
{"First Item", "Second Item", "Third Item"},
width(200),
max selected(2),
nlines(6)
),
Lineup Box(N Col(1),
btn_up = Button Box("", move_items(lb_ref, "Up"), << Set Icon("ListItemUp"), << Set Tip("Move selection up")),
btn_down = Button Box("", move_items(lb_ref, "Down"), << Set Icon("ListItemDown"), << Set Tip("Move selection down")),
)
)
);
我认为您可以使用鼠标框进行拖放,但我更喜欢 JMP 中的按钮(更容易创建)