$engine JScript
$uname vtcreator
$dname Конструктор ТЗ
// Александр Орефков
// Это небольшой скрипт с формой для генерации текста создания ТаблицыЗначений.
// Позволяет ввести имя переменной, а также состав колонок с указанием имени,
// описания типа, заголовка, ширины.
// Для ввода описания типа используется штатный "Конструктор описания типов".
// Надо бы наверное сделать еще ввод индексов, может кто-то доделает?
addins.byUniqueName("global").object.connectGlobals(SelfScript)
form = loadScriptForm(SelfScript.fullPath.replace(/js$/i, "ssf"), SelfScript.self)
form.КлючСохраненияПоложенияОкна = "vtcreator"
function macrosСоздатьТаблицуЗначений()
{
if(!snegopat.activeTextWindow())
form.ЭлементыФормы.НеактивностьОкна.Заголовок = "Нет активного текстового окна. Текст будет выведен в окно сообщений"
else
form.ЭлементыФормы.НеактивностьОкна.Заголовок = ""
if(!form.ОткрытьМодально())
return
var text = form.ИмяПеременной + " = Новый ТаблицаЗначений;\n"
// Для каждого из
for(var rows = new Enumerator(form.СоставКолонок); !rows.atEnd(); rows.moveNext())
{
var row = rows.item()
var items = new Array()
items.push(row.Имя.length ? '"' + row.Имя + '"' : "")
items.push(row.Тип)
items.push(row.Заголовок.length ? '"' + row.Заголовок + '"' : "")
items.push(row.Ширина ? "" + row.Ширина : "")
text += form.ИмяПеременной + '.Колонки.Добавить(' + items.join(', ').replace(/(,\s)+$/, "") + ");\n"
}
var txtWnd = snegopat.activeTextWindow()
if(!txtWnd)
Message(text)
else
{
// Надо получить отступ
var sel = txtWnd.getSelection()
var textLine = txtWnd.line(sel.beginRow)
// Курсор может быть за концом строки
while(textLine.length < sel.beginCol - 1)
textLine += ' '
// Оставим только часть строки перед курсором
textLine = textLine.substr(0, sel.beginCol - 1)
var m = textLine.match(/^\s+/)
if(m) // Есть пробельные символы в начале строки
text = text.replace(/\n/g, '\n' + m[0]) // Заменим переводы строк на перевод строк + отступ
text = text.replace(/\s+$/m, '') // СокрП
// Вставим текст
txtWnd.selectedText = text
//txtWnd.setCaretPos(sel.beginRow, sel.beginCol)
}
}
function ОтменаНажатие(Элемент)
{
form.Закрыть(false)
}
function ОКНажатие(Элемент)
{
form.Закрыть(true)
}
function СоставКолонокТипНачалоВыбора(Элемент, СтандартнаяОбработка)
{
var input = snegopat.parseTemplateString('<?"Укажите тип", КонструкторОписанияТипов>')
if(input.length)
{
input = input.replace(/\n|;$/g, '')
form.ЭлементыФормы.СоставКолонок.ТекущаяСтрока.Тип = input
}
}