1
0
mirror of https://github.com/Nivanchenko/formhelper.git synced 2024-11-21 17:36:31 +02:00

Команды с атрибутами

Добавлена возможность создавать команды по аналогии с элементами и устанавливать атрибуты командам.
Добавлен расширенный пример создания команды.
This commit is contained in:
Червяков И.О. 2024-08-06 15:16:29 +03:00
parent dbd35c7432
commit 2e1257e118
3 changed files with 203 additions and 42 deletions

View File

@ -25,13 +25,21 @@
.Кнопка("КнопкаПривет")
.Заголовок("Привет")
.ИмяКоманды("Приветствие")
//Команда простая
.Команда("Приветствие", "ПриветствиеКлиент")
// Еще кнопка
.Кнопка("ЕщеКонманда")
.Заголовок("Еще команда")
.ИмяКоманды("ЕщеКонманда")
//Еще команда с атрибутами
.Команда("ЕщеКонманда", "ЕщеКомандаНаКлиенте")
.Заголовок("Команда еще")
.Картинка(БиблиотекаКартинок.Документ)
.Отображение(ОтображениеКнопки.КартинкаИТекст)
.ИзменяетСохраняемыеДанные(Истина)
.Подсказка("Команда с атрибутами")
// Строковый реквизит с полем ввода
.РеквизитСтрока("ЕщеСтроковыйРеквизит", 100)

View File

@ -1,6 +1,8 @@
Перем Форма;
Перем ДобавляемыеРеквизиты;
Перем ТекущийЭлемент;
Перем ТекущаяКоманда;
Перем ТекущийПоток;
Перем Элементы;
Перем Команды;
Перем ПутьРеквизита;
@ -12,7 +14,7 @@
Процедура Инициализация(_Форма) Экспорт
Форма = _Форма;
ДобавляемыеРеквизиты = Новый Массив;
Команды = Новый Структура;
ТаблицаКоманд();
ТаблицаЭлементов();
ПутьРеквизита = "";
@ -163,13 +165,35 @@
#КонецОбласти
#Область Команды__К
Функция Команда(Имя, Метод) Экспорт
ТекущаяКоманда = ПараметрыСозданияКоманды();
ТекущаяКоманда.Имя = Имя;
ТекущаяКоманда.Действие = Метод;
ТекущийПоток = ТекущаяКоманда;
Команда = Команды.Добавить();
Команда.Имя = Имя;
Команда.Параметры = ТекущаяКоманда;
Возврат ЭтотОбъект;
КонецФункции // Команда()
#КонецОбласти
#Область Элементы__Э
Функция ДобавитьЭлементФормы(Имя) Экспорт
ТекущийЭлемент = ПараметрыСозданияЭлементов();
ТекущийЭлемент.Имя = Имя;
ТекущийПоток = ТекущийЭлемент;
Элемент = Элементы.Добавить();
Элемент.Имя = Имя;
Элемент.Параметры = ТекущийЭлемент;
@ -237,14 +261,6 @@
КонецФункции
Функция Команда(Имя, Метод) Экспорт
Команды.Вставить(Имя, Метод);
Возврат ЭтотОбъект;
КонецФункции // Команда()
Функция ТаблицаФормы(Имя) Экспорт
ДобавитьЭлементФормы(Имя);
@ -270,9 +286,9 @@
Функция Свойство(Имя, Значение) Экспорт
ПроверитьТекущийЭлемент();
ПроверитьТекущийПоток();
ТекущийЭлемент.Вставить(Имя, Значение);
ТекущийПоток.Вставить(Имя, Значение);
Возврат ЭтотОбъект;
@ -1298,40 +1314,16 @@
ТекущийЭлемент = Элемент.Параметры;
КонецЕсли;
ТекущийПоток = ТекущийЭлемент;
Возврат ЭтотОбъект;
КонецФункции // ТекущийЭлемент
Функция Применить() Экспорт
СоздатьРеквизиты();
СоздатьКоманды();
СоздатьЭлементы();
Возврат ЭтотОбъект;
КонецФункции // Применить()
Функция СоздатьКоманды()
Для Каждого Команда из Команды Цикл
НоваяКоманда = Форма.Команды.Добавить(Команда.Ключ);
НоваяКоманда.Заголовок = Команда.Ключ;
НоваяКоманда.Действие = Команда.Значение;
КонецЦикла;
Команды = Новый Структура;
Возврат ЭтотОбъект;
КонецФункции // СоздатьКоманды()
Функция СоздатьЭлементы()
Для Каждого Элемент из Элементы Цикл
Если не Элемент.Обработан = Истина Тогда
Если Не Элемент.Обработан = Истина Тогда
СоздатьЭлемент(Элемент);
КонецЕсли;
КонецЦикла;
@ -1449,6 +1441,10 @@
Если ТекущийЭлемент = Неопределено Тогда
ВызватьИсключение "Элемент не инициализирован";
КонецЕсли;
Если НЕ ТекущийЭлемент = ТекущийПоток Тогда
ВызватьИсключение "Обработчик не применим к команде";
КонецЕсли;
КонецПроцедуры
@ -1461,3 +1457,155 @@
КонецФункции // ПутьРеквизита()
#КонецОбласти
#Область Команды_Свойства__С
Функция ИзменяетСохраняемыеДанные(ИзменяетСохраняемыеДанные) Экспорт
Свойство("ИзменяетСохраняемыеДанные", ИзменяетСохраняемыеДанные);
Возврат ЭтотОбъект;
КонецФункции
#КонецОбласти
#Область Команды_Вспомогательные__У
Функция ТекущаяКоманда(Имя) Экспорт
Команда = Команды.Найти(Имя, "Имя");
Если Команда = Неопределено Тогда
КомандаФормы = Форма.Команды.Найти(Имя);
Если КомандаФормы = Неопределено Тогда
ВызватьИсключение "Команда не найдена " + Имя;
Иначе
ТекущаяКоманда = ПараметрыСозданияКоманды();
ТекущаяКоманда.Имя = Имя;
Элемент = Команды.Добавить();
Элемент.Имя = Имя;
Элемент.Параметры = ТекущийЭлемент;
Элемент.КомандаФормы = КомандаФормы;
КонецЕсли;
Иначе
ТекущийЭлемент = Элемент.Параметры;
КонецЕсли;
ТекущийПоток = ТекущийЭлемент;
Возврат ЭтотОбъект;
КонецФункции // ТекущийЭлемент
Функция СоздатьКоманды()
Для Каждого Команда из Команды Цикл
Если Не Команда.Обработан = Истина Тогда
СоздатьКоманду(Команда);
КонецЕсли;
КонецЦикла;
ТаблицаКоманд();
Возврат ЭтотОбъект;
КонецФункции // СоздатьКоманды()
Функция СоздатьКоманду(Команда)
ПараметрыСоздания = Команда.Параметры;
Если Команда.КомандаФормы = Неопределено Тогда
НоваяКоманда = Форма.Команды.Добавить(Команда.Имя);
НоваяКоманда.Заголовок = ПараметрыСоздания.Заголовок;
НоваяКоманда.Действие = ПараметрыСоздания.Действие;
Иначе
НоваяКоманда = Команда.КомандаФормы;
КонецЕсли;
Если Не ПараметрыСоздания.ИзменяетСохраняемыеДанные = Неопределено Тогда
НоваяКоманда.ИзменяетСохраняемыеДанные = ПараметрыСоздания.ИзменяетСохраняемыеДанные;
КонецЕсли;
Если Не ПараметрыСоздания.Картинка = Неопределено Тогда
НоваяКоманда.Картинка = ПараметрыСоздания.Картинка;
КонецЕсли;
Если Не ПараметрыСоздания.Подсказка = Неопределено Тогда
НоваяКоманда.Подсказка = ПараметрыСоздания.Подсказка;
КонецЕсли;
Если Не ПараметрыСоздания.СочетаниеКлавиш = Неопределено Тогда
НоваяКоманда.СочетаниеКлавиш = ПараметрыСоздания.СочетаниеКлавиш;
КонецЕсли;
//Прочие свойства
СтандартныеСвойства = ПараметрыСозданияКоманды();
Для Каждого ТекСвойство из ПараметрыСоздания Цикл
Если СтандартныеСвойства.Свойство(ТекСвойство.Ключ) = Ложь Тогда
НоваяКоманда[ТекСвойство.Ключ] = ТекСвойство.Значение;
КонецЕсли;
КонецЦикла;
Команда.КомандаФормы = НоваяКоманда;
Команда.Обработан = Истина;
Возврат НоваяКоманда;
КонецФункции
Процедура ТаблицаКоманд()
Команды = Новый ТаблицаЗначений;
Команды.Колонки.Добавить("Имя");
Команды.Колонки.Добавить("КомандаФормы");
Команды.Колонки.Добавить("Параметры");
Команды.Колонки.Добавить("Обработан");
КонецПроцедуры
Функция ПараметрыСозданияКоманды()
Результат = Новый Структура;
Результат.Вставить("Имя");
Результат.Вставить("Действие");
Результат.Вставить("ИзменяетСохраняемыеДанные");
Результат.Вставить("Заголовок");
Результат.Вставить("Картинка");
Результат.Вставить("Подсказка");
Результат.Вставить("СочетаниеКлавиш");
Возврат Результат;
КонецФункции
#КонецОбласти
#Область Общие_Вспомогательные__О
Процедура ПроверитьТекущийПоток()
Если ТекущийПоток = Неопределено Тогда
ВызватьИсключение "Элемент не инициализирован";
КонецЕсли;
КонецПроцедуры
Функция Применить() Экспорт
СоздатьРеквизиты();
СоздатьКоманды();
СоздатьЭлементы();
Возврат ЭтотОбъект;
КонецФункции // Применить()
#КонецОбласти

View File

@ -1,5 +1,5 @@
{1,
{144,
{145,
{"ПостроительФорм",1,0,"",""},
{0,
{"(Р) ДобавитьРеквизит(Имя, Тип)",0,0,".[ДобавитьРеквизит]",".ДобавитьРеквизит(<?>, Тип)"}
@ -182,6 +182,9 @@
{"(С) ИзменятьСоставСтрок(ИзменятьСоставСтрок)",0,0,".[ИзменятьСоставСтрок]",".ИзменятьСоставСтрок(<?>)"}
},
{0,
{"(С) ИзменяетСохраняемыеДанные(ИзменяетСохраняемыеДанные)",0,0,".[ИзменяетСохраняемыеДанные]",".ИзменяетСохраняемыеДанные(<?>)"}
},
{0,
{"(С) Имя(Имя)",0,0,".[Имя]",".Имя(<?>)"}
},
{0,
@ -432,4 +435,6 @@
},
{0,
{"(У) ПутьРеквизита(ПутьРеквизита = "")",0,0,".[ПутьРеквизита]",".ПутьРеквизита(<?>)"}
},}}
}
}
}