A test script
dlgtest.opusscriptinstall (1.6 KB)
the code
function OnInit(initData) {
initData.name = "test";
initData.version = "1.0";
initData.copyright = "";
initData.desc = "";
initData.default_enable = true;
initData.min_version = "13.17";
}
// Called to add commands to Opus
function OnAddCommands(addCmdData) {
var cmd = addCmdData.AddCommand();
cmd.name = "test";
cmd.method = "Ontest";
cmd.desc = "";
cmd.label = "test";
cmd.template = "";
cmd.hide = false;
cmd.icon = "script";
}
// Implements the test command
function Ontest() {
DOpus.ClearOutput();
var dlg = DOpus.Dlg();
dlg.template = 'main';
dlg.Create();
var listview = dlg.Control('listview');
var content = [];
var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
listview.AddGroup('Checked', 1);
listview.AddGroup('Unchecked', 0);
listview.EnableGroupView(true);
for (var i = 0; i < 10; i++) {
content.push({
'col1': RandomStr(10),
'col2': RandomStr(10)
});
}
dlg.Show();
FillList();
var msg;
while (true) {
msg = dlg.GetMsg();
if (!msg.result) break;
if (msg.event === 'click') {
switch (msg.control) {
case 'up_btn':
MoveItemList(-1);
break;
case 'down_btn':
MoveItemList(1);
break;
}
}
else if (msg.event === 'checked') {
MoveGroup(msg.index);
}
}
function FillList() {
var item, row;
listview.redraw = false;
listview.RemoveItem(-1);
for (var i = 0; i < content.length; i++) {
item = content[i];
row = listview.getItemAt(listview.AddItem(item.col1, i, 0));
if (!row) continue;
row.subitems(0).text = item.col2;
}
listview.columns.autosize();
listview.redraw = true;
}
function MoveItemList(num) {
var row = listview.value;
if (!row ) return;
Log('Selected "' + row.name + '" pos=' + row.index);
var new_pos = row.index + num;
Log('Moving "' + row.name + '" to ' + new_pos);
if (new_pos < 0 || new_pos >= listview.count) return;
Log('Moved to ' + listview.MoveItem(row, new_pos));
// Log('Moved to ' + listview.MoveItem(row.index, new_pos));// does the same
row.selected = true;
}
function MoveGroup(index) {
var row = listview.getItemAt(index);
if (!row) return;
row.group = row.checked ? 1 : 0;
row.selected = true;
}
function RandomStr(len) {
if (len === 0) return '';
var out = '';
for (var i = 0; i < len; i++) {
out += chars.charAt(Math.floor(Math.random() * chars.length));
}
return out;
}
}
function Log(text, err) {
DOpus.Output(text, err);
}
==SCRIPT RESOURCES
<resources>
<resource name="main" type="dialog">
<dialog height="156" lang="english" width="290">
<control checkboxes="auto" fullrow="yes" height="148" name="listview" nosortheader="yes" resize="wh" type="listview" viewmode="details" width="266" x="20" y="4">
<columns>
<item text="Col1" />
<item text="Col2" />
</columns>
</control>
<control height="14" name="up_btn" title="UP" type="button" width="14" x="4" y="12" />
<control height="14" name="down_btn" title="D" type="button" width="14" x="4" y="28" />
</dialog>
</resource>
</resources>
To move an item up or down the list, use the corresponding buttons.
I don't know if I'm doing something wrong, but when a ListView uses groups and you try to move an item, it disappears (shows index -1).
If I disable groups, the script above can move the items normally.