mirror of
https://github.com/Nivanchenko/formhelper.git
synced 2024-11-21 17:36:31 +02:00
Команды с атрибутами
Добавлена возможность создавать команды по аналогии с элементами и устанавливать атрибуты командам. Добавлен расширенный пример создания команды.
This commit is contained in:
parent
dbd35c7432
commit
2e1257e118
10
README.md
10
README.md
@ -25,13 +25,21 @@
|
||||
.Кнопка("КнопкаПривет")
|
||||
.Заголовок("Привет")
|
||||
.ИмяКоманды("Приветствие")
|
||||
|
||||
//Команда простая
|
||||
.Команда("Приветствие", "ПриветствиеКлиент")
|
||||
|
||||
// Еще кнопка
|
||||
.Кнопка("ЕщеКонманда")
|
||||
.Заголовок("Еще команда")
|
||||
.ИмяКоманды("ЕщеКонманда")
|
||||
|
||||
//Еще команда с атрибутами
|
||||
.Команда("ЕщеКонманда", "ЕщеКомандаНаКлиенте")
|
||||
.Заголовок("Команда еще")
|
||||
.Картинка(БиблиотекаКартинок.Документ)
|
||||
.Отображение(ОтображениеКнопки.КартинкаИТекст)
|
||||
.ИзменяетСохраняемыеДанные(Истина)
|
||||
.Подсказка("Команда с атрибутами")
|
||||
|
||||
// Строковый реквизит с полем ввода
|
||||
.РеквизитСтрока("ЕщеСтроковыйРеквизит", 100)
|
||||
|
@ -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 @@
|
||||
КонецФункции // ПутьРеквизита()
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область Команды_Свойства__С
|
||||
|
||||
Функция ИзменяетСохраняемыеДанные(ИзменяетСохраняемыеДанные) Экспорт
|
||||
|
||||
Свойство("ИзменяетСохраняемыеДанные", ИзменяетСохраняемыеДанные);
|
||||
|
||||
Возврат ЭтотОбъект;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область Команды_Вспомогательные__У
|
||||
|
||||
Функция ТекущаяКоманда(Имя) Экспорт
|
||||
|
||||
Команда = Команды.Найти(Имя, "Имя");
|
||||
|
||||
Если Команда = Неопределено Тогда
|
||||
|
||||
КомандаФормы = Форма.Команды.Найти(Имя);
|
||||
|
||||
Если КомандаФормы = Неопределено Тогда
|
||||
ВызватьИсключение "Команда не найдена " + Имя;
|
||||
Иначе
|
||||
|
||||
ТекущаяКоманда = ПараметрыСозданияКоманды();
|
||||
ТекущаяКоманда.Имя = Имя;
|
||||
|
||||
Элемент = Команды.Добавить();
|
||||
Элемент.Имя = Имя;
|
||||
Элемент.Параметры = ТекущийЭлемент;
|
||||
Элемент.КомандаФормы = КомандаФормы;
|
||||
|
||||
КонецЕсли;
|
||||
Иначе
|
||||
ТекущийЭлемент = Элемент.Параметры;
|
||||
КонецЕсли;
|
||||
|
||||
ТекущийПоток = ТекущийЭлемент;
|
||||
|
||||
Возврат ЭтотОбъект;
|
||||
|
||||
КонецФункции // ТекущийЭлемент
|
||||
|
||||
Функция СоздатьКоманды()
|
||||
|
||||
Для Каждого Команда из Команды Цикл
|
||||
Если Не Команда.Обработан = Истина Тогда
|
||||
СоздатьКоманду(Команда);
|
||||
КонецЕсли;
|
||||
КонецЦикла;
|
||||
|
||||
ТаблицаКоманд();
|
||||
|
||||
Возврат ЭтотОбъект;
|
||||
|
||||
КонецФункции // СоздатьКоманды()
|
||||
|
||||
Функция СоздатьКоманду(Команда)
|
||||
|
||||
ПараметрыСоздания = Команда.Параметры;
|
||||
|
||||
Если Команда.КомандаФормы = Неопределено Тогда
|
||||
НоваяКоманда = Форма.Команды.Добавить(Команда.Имя);
|
||||
НоваяКоманда.Заголовок = ПараметрыСоздания.Заголовок;
|
||||
НоваяКоманда.Действие = ПараметрыСоздания.Действие;
|
||||
Иначе
|
||||
НоваяКоманда = Команда.КомандаФормы;
|
||||
КонецЕсли;
|
||||
|
||||
Если Не ПараметрыСоздания.ИзменяетСохраняемыеДанные = Неопределено Тогда
|
||||
НоваяКоманда.ИзменяетСохраняемыеДанные = ПараметрыСоздания.ИзменяетСохраняемыеДанные;
|
||||
КонецЕсли;
|
||||
|
||||
Если Не ПараметрыСоздания.Картинка = Неопределено Тогда
|
||||
НоваяКоманда.Картинка = ПараметрыСоздания.Картинка;
|
||||
КонецЕсли;
|
||||
|
||||
Если Не ПараметрыСоздания.Подсказка = Неопределено Тогда
|
||||
НоваяКоманда.Подсказка = ПараметрыСоздания.Подсказка;
|
||||
КонецЕсли;
|
||||
|
||||
Если Не ПараметрыСоздания.СочетаниеКлавиш = Неопределено Тогда
|
||||
НоваяКоманда.СочетаниеКлавиш = ПараметрыСоздания.СочетаниеКлавиш;
|
||||
КонецЕсли;
|
||||
|
||||
//Прочие свойства
|
||||
СтандартныеСвойства = ПараметрыСозданияКоманды();
|
||||
Для Каждого ТекСвойство из ПараметрыСоздания Цикл
|
||||
Если СтандартныеСвойства.Свойство(ТекСвойство.Ключ) = Ложь Тогда
|
||||
НоваяКоманда[ТекСвойство.Ключ] = ТекСвойство.Значение;
|
||||
КонецЕсли;
|
||||
КонецЦикла;
|
||||
|
||||
Команда.КомандаФормы = НоваяКоманда;
|
||||
Команда.Обработан = Истина;
|
||||
|
||||
Возврат НоваяКоманда;
|
||||
|
||||
КонецФункции
|
||||
|
||||
Процедура ТаблицаКоманд()
|
||||
|
||||
Команды = Новый ТаблицаЗначений;
|
||||
Команды.Колонки.Добавить("Имя");
|
||||
Команды.Колонки.Добавить("КомандаФормы");
|
||||
Команды.Колонки.Добавить("Параметры");
|
||||
Команды.Колонки.Добавить("Обработан");
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Функция ПараметрыСозданияКоманды()
|
||||
|
||||
Результат = Новый Структура;
|
||||
|
||||
Результат.Вставить("Имя");
|
||||
Результат.Вставить("Действие");
|
||||
Результат.Вставить("ИзменяетСохраняемыеДанные");
|
||||
Результат.Вставить("Заголовок");
|
||||
Результат.Вставить("Картинка");
|
||||
Результат.Вставить("Подсказка");
|
||||
Результат.Вставить("СочетаниеКлавиш");
|
||||
|
||||
Возврат Результат;
|
||||
|
||||
КонецФункции
|
||||
|
||||
#КонецОбласти
|
||||
|
||||
#Область Общие_Вспомогательные__О
|
||||
|
||||
Процедура ПроверитьТекущийПоток()
|
||||
|
||||
Если ТекущийПоток = Неопределено Тогда
|
||||
ВызватьИсключение "Элемент не инициализирован";
|
||||
КонецЕсли;
|
||||
|
||||
КонецПроцедуры
|
||||
|
||||
Функция Применить() Экспорт
|
||||
|
||||
СоздатьРеквизиты();
|
||||
СоздатьКоманды();
|
||||
СоздатьЭлементы();
|
||||
|
||||
Возврат ЭтотОбъект;
|
||||
|
||||
КонецФункции // Применить()
|
||||
|
||||
#КонецОбласти
|
||||
|
@ -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,".[ПутьРеквизита]",".ПутьРеквизита(<?>)"}
|
||||
},}}
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user