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(); }