﻿$engine JScript
$uname choiceHelpTopic
$dname Выбрать главу справки
$addin stdlib

// (c) Александр Орефков
// Скрипт позволяет быстрее выбрать нужную главу справки, когда одному слову
// соответствует несколько разделов

stdlib.require("SelectValueDialog.js", SelfScript);

СhoiceHelpTopic = stdlib.Class.extend({

    construct : function () {    
        СhoiceHelpTopic._instance = this;
        events.connect(windows, "onDoModal", this)
    },

    onDoModal:function(dlgInfo){
        if(dlgInfo.caption == "Выбор главы" && dlgInfo.stage == afterInitial)
        {
            var grid = dlgInfo.form.getControl("tblTopics").extInterface
            var sel = this.choiceNative(grid);
            if(sel)
            {
                grid.currentRow = sel
                dlgInfo.form.sendEvent(dlgInfo.form.getControl('btnShow').id, 0)
            }
        }
    },

    setFilter:function(str){
        replaces = [
            [/Прикладные объекты\//, 'Прикл.объект\/'],
            [/Интерфейс \(управляемый\)\//, 'Интерф.упр\/'],
            [/Универсальные коллекции значений\//, 'Унив.колл.знач\/'],
            [/Общие объекты\//, 'Общ.объек\/'],
            [/\/Система компоновки данных\//, '\/СКД\/'],
            [/\/Схема компоновки данных\//, '\/Схема КД\/'],
            [/\/Настройки компоновки данных\//, '\/Настройки КД\/'],
            [/Общее описание встроенного языка\//, 'Общ.опис.встр.яз\/'],
            [/Встроенные функции\//, 'Встр.функц.\/'],
            [/\/Функции работы со значениями типа/, '\/Функц.раб.знач.типа '],
            [/\/Универсальные объекты/, '\/Универ.объект'],
            [/\/Управляемая форма/, '\/Упр.форма']
        ]
        for(var k in replaces)
            str = str.replace(replaces[k][0], replaces[k][1])
        return str
    },
    choiceNative:function(grid) {
        var choices = v8New('СписокЗначений');
        for(var k = grid.dataSource.root.firstChild; k ; k = k.next)
            choices.Add(k, this.setFilter(k.getCellValue(0)));

        var dlg = new SelectValueDialog("Выберите главу", choices);
        dlg.form.GreedySearch = true;
        if (dlg.selectValue())
            return dlg.selectedValue
        return null
    }
})

function GetСhoiceHelpTopic() {
    if (!СhoiceHelpTopic._instance)
        new СhoiceHelpTopic();
    return СhoiceHelpTopic._instance;
}

var cht = GetСhoiceHelpTopic();
