function OnInit(initData) {
initData.name = 'SaveLayoutsAsVars';
initData.version = '2025-10-03';
initData.url = 'https://resource.dopus.com/t/cycle-through-layouts/51223';
initData.default_enable = true;
initData.min_version = '12.0';
}
function OnActivateLister(activateListerData) {
if (!activateListerData.active) return;
var cmd = DOpus.Create().Command();
var stt = DOpus.Create().StringTools();
var vec = DOpus.Create().Vector();
var fsu = DOpus.FSUtil();
var lst = activateListerData.lister;
var xmlOrder = fsu.GetItem(fsu.Resolve('/dopusdata\\Layouts\\order.xml'));
if (!fsu.Exists(xmlOrder)) return;
var arr = stt.Decode(xmlOrder.Open().Read(), 'utf8').split('\r\n');
var re = /.*.*/;
for (var i = 0; i < arr.length; i++) {
var tmp = arr[i].match(re);
if (!tmp) continue;
if (tmp.length != 2) continue;
var layoutName = tmp[1];
var layoutFile = fsu.Resolve('/dopusdata\\Layouts\\' + layoutName + '.oll');
if (!fsu.Exists(layoutFile)) continue;
var tmpFile = fsu.OpenFile(layoutFile);
var xmlText = stt.Decode(tmpFile.Read(), 'utf8');
tmpFile.Close();
if (xmlText.indexOf('') > 0) continue; // Layout is hidden
vec.push_back(layoutName);
}
if (vec.empty) return;
var currLayout = lst.layout;
var k = 0;
for (var i = 0; i < vec.length; i++) {
if (vec[i] != currLayout) continue;
k = i;
break;
}
var prev = k - 1;
if (prev < 0) prev = vec.length - 1;
var next = k + 1;
if (next == vec.length) next = 0;
lst.vars.Set('prevLayout', vec[prev]);
lst.vars.Set('currLayout', currLayout);
lst.vars.Set('nextLayout', vec[next]);
cmd.UpdateToggle();
}