Снегопат
https://snegopat.ru/forum/

Хочу изменить модель привязки к событиям Designer'а
https://snegopat.ru/forum/viewtopic.php?f=3&t=11
Страница 1 из 1

Автор:  orefkov [ 26 авг 2011, 10:21 ]
Заголовок сообщения:  Хочу изменить модель привязки к событиям Designer'а

Решил вот посоветоваться.
Сейчас принята стандартная OLE-Automation модель привязки к событиям, порождаемым объектом Designer, на базе интерфейсов IConnectionPoint
Однако есть у нее недостатки.
Для скриптописателей неудобна тем, что нельзя контролировать когда реагировать на событие, а когда нет.
Если есть обработчик события, то он вызывается всегда при возникновении события.
Все помнят о неизбежных глобальных флагах в скриптах при обработке например OnMessageBox, OnDoModal, OnFileDialog и тд и тп.
Также обработчик события может быть только один на весь скрипт. И если например создается несколько объектов, каждый из которых хочет реагировать на событие, приходится самому вести список этих объектов и руками в событии дергать каждый этот объект.

Для Designer'а неудобно тем, что нельзя указать конкретные события, к которым привязывается получатель - если он привязывается, то сразу ко всем событиям.
То есть если в скрипте есть обработчик хотя-бы одного события, то скрипт дергается при любом событии, независимо от того, есть в нем обработчик этого события или нет.

Поэтому я хочу перейти на систему, похожую на модель "сигнал-слот" из QT.
У объекта Designer сделать два метода - connect и disconnect.
В методе connect указывается имя события, к которому хотим привязаться, объект-получатель события, имя обработчика события в объекте.
Например:
Код:
connect("onDoModal", SelfScript.self, "onDesignerDoModal")
...
disconnect("onDoModal", SelfScript.self, "onDesignerDoModal")

таким образом, выгода: для скриптописателей - гибкость в реагировании на события, для designer'а - вызываться будут действительно только те обработчики, которые в этом нуждаются.
А соответственно, это опять же выгода для общей производительности системы.

Есть у кого-нибудь мысли на эту тему?

Автор:  artbear [ 26 авг 2011, 11:38 ]
Заголовок сообщения:  Re: Хочу изменить модель привязки к событиям Designer'а

Хорошее и удобное предложение.
Я как раз на днях размышлял над единой событийной моделью для скриптов - например, добавить возможность создавать события у одного скрипта и задавать обработчики в других скриптах - делегаты, общие вызовы и т.п.

При необходимости, на базе твоего предложения можно сделать универсальный код по установке обработчиков и вызов его при начале начале аддина.
Например, этот код может подписывать только те методы, у которых в начале наименования стоит "onEvent" - например, метод onEventDoModal
Т.е. часть скриптов вызывает один простой метод для простой установки всех нужных обработчиков, а часть вызывает напрямую connect и disconnect

Вопрос: твое предложение на события от форм 1С также распространяются? или там останется, как есть сейчас? полностью автоматически при загрузке формы?

Автор:  orefkov [ 26 авг 2011, 12:09 ]
Заголовок сообщения:  Re: Хочу изменить модель привязки к событиям Designer'а

artbear писал(а):
Вопрос: твое предложение на события от форм 1С также распространяются? или там останется, как есть сейчас? полностью автоматически при загрузке формы?

Я думаю, для форм это удобно и достаточно.
Там в loadScriptForm третьим параметром можно указать префикс, который будет добавляться к именам обработчиков, думаю этого достаточно.
те если делать loadScriptForm(путь, SelfScript.self, "form1_")
то обработчики будут искаться как "form1_ИмяОбработчикаВФорме"
это на случай, если один объект захочет обрабатывать события нескольких форм, и в них есть одинаковые события.
Тогда можно делать
Код:
loadScriptForm(путь1, SelfScript.self, "form1_")
loadScriptForm(путь2, SelfScript.self, "form2_")

Автор:  kuntashov [ 26 авг 2011, 13:35 ]
Заголовок сообщения:  Re: Хочу изменить модель привязки к событиям Designer'а

Я за новую событийную модель.

А это надо в вики:

orefkov писал(а):
Там в loadScriptForm третьим параметром можно указать префикс, который будет добавляться к именам обработчиков, думаю этого достаточно.
те если делать loadScriptForm(путь, SelfScript.self, "form1_")
то обработчики будут искаться как "form1_ИмяОбработчикаВФорме"
это на случай, если один объект захочет обрабатывать события нескольких форм, и в них есть одинаковые события.
Тогда можно делать
Код:
loadScriptForm(путь1, SelfScript.self, "form1_")
loadScriptForm(путь2, SelfScript.self, "form2_")

Автор:  artbear [ 17 май 2012, 16:23 ]
Заголовок сообщения:  Re: Хочу изменить модель привязки к событиям Designer'а

Хочу получить список всех возможных событий, но не могу найти их описание.
поиск по connect в скриптах дает результаты, но хочется полного списка.
На форуме также ничего не нашел.
(orefkov) Выложишь?

Автор:  orefkov [ 24 май 2012, 20:39 ]
Заголовок сообщения:  Re: Хочу изменить модель привязки к событиям Designer'а

Пока не выложу.
Можно сделать поиск по скриптам "events.connect(", вроде для всех событий есть примеры, кроме "onMessage"

Автор:  artbear [ 25 май 2012, 10:11 ]
Заголовок сообщения:  Re: Хочу изменить модель привязки к событиям Designer'а

Добавил в Вики краткий перечень и некоторое описание найденных событий
События Снегопата

Автор:  artbear [ 25 май 2012, 15:07 ]
Заголовок сообщения:  Re: Хочу изменить модель привязки к событиям Designer'а

onChangeTextManager вообще не нашел описания :( -
Саш, в описании изменений по событию ты писал "для SciColorerV8"
Подскажешь описание события?
Зы можно сразу в Вики

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/