// +++.КЛАСС.ПолеТекстовогоДокументаСКонтекстнойПодсказкой
// Это коллекция экземпляров компоненты. Обязательный блок.
Перем ПолеТекстовогоДокументаСКонтекстнойПодсказкой;
// ---.КЛАСС.ПолеТекстовогоДокументаСКонтекстнойПодсказкой

Перем мТекущаяСтраница;
 
Процедура ЗакрытьССохранением()

	Текст = ПолучитьТекст();
	ирОбщий.ПрименитьИзмененияИЗакрытьФормуЛкс(ЭтаФорма, Текст);

КонецПроцедуры // ЗакрытьССохранением()

Процедура ОсновныеДействияФормыОК(Кнопка)
	
	ЗакрытьССохранением();
	
КонецПроцедуры

Процедура ПриОткрытии()

	// +++.КЛАСС.ПолеТекстовогоДокументаСКонтекстнойПодсказкой
	ПолеТекстовогоДокументаСКонтекстнойПодсказкой = Новый Структура;
	Обработка1 = ирОбщий.ПолучитьОбъектПоПолномуИмениМетаданныхЛкс("Обработка.ирКлсПолеТекстовогоДокументаСКонтекстнойПодсказкой");
	#Если Сервер И Не Сервер Тогда
	    Обработка1 = Обработки.ирКлсПолеТекстовогоДокументаСКонтекстнойПодсказкой.Создать();
	#КонецЕсли
	Обработка1.Инициализировать(ПолеТекстовогоДокументаСКонтекстнойПодсказкой,
		ЭтаФорма, ЭлементыФормы.ВстроенныйЯзык, ЭлементыФормы.КоманднаяПанельВстроенныйЯзык, Ложь, "ВыполнитьЛокально", ЭтаФорма);
	Обработка2 = ирОбщий.ПолучитьОбъектПоПолномуИмениМетаданныхЛкс("Обработка.ирКлсПолеТекстовогоДокументаСКонтекстнойПодсказкой");
	#Если Сервер И Не Сервер Тогда
	    Обработка2 = Обработки.ирКлсПолеТекстовогоДокументаСКонтекстнойПодсказкой.Создать();
	#КонецЕсли
	Обработка2.Инициализировать(ПолеТекстовогоДокументаСКонтекстнойПодсказкой,
		ЭтаФорма, ЭлементыФормы.ЯзыкЗапросов, ЭлементыФормы.КоманднаяПанельЯзыкЗапросов, Истина);
	// ---.КЛАСС.ПолеТекстовогоДокументаСКонтекстнойПодсказкой
	
	УстановитьТекст(НачальноеЗначениеВыбора);
	Если РекомендуемыйВариант <> "" Тогда
		ЭлементыФормы.ПанельОсновная.ТекущаяСтраница = ЭлементыФормы.ПанельОсновная.Страницы[РекомендуемыйВариант];
	КонецЕсли;
	ЭлементыФормы.ТолькоПросмотр.Доступность = Не ТолькоПросмотр;
	ЭтаФорма.рТолькоПросмотр = ТолькоПросмотр;
	ОбновитьДоступность();
	
КонецПроцедуры

Процедура ОбновитьДоступность()
	
	Если ТолькоПросмотр Тогда
		НоваяСтрока = "" + СтрДлина(НачальноеЗначениеВыбора) + " символов";
	Иначе
		НоваяСтрока = "";
	КонецЕсли;
	ирОбщий.ОбновитьТекстПослеМаркераВСтрокеЛкс(ЭтаФорма.Заголовок,, НоваяСтрока);

КонецПроцедуры

Процедура ПередЗакрытием(Отказ, СтандартнаяОбработка)
	
	Если Модифицированность Тогда
		СтандартнаяОбработка = Ложь;
		Ответ = Вопрос("Строковый литерал был изменен. Сохранить изменения?", РежимДиалогаВопрос.ДаНетОтмена);
		Если Ответ = КодВозвратаДиалога.Отмена Тогда
			Отказ = Истина;
			Возврат;
		ИначеЕсли Ответ = КодВозвратаДиалога.Да Тогда
			ЗакрытьССохранением();
		КонецЕсли;
	КонецЕсли;
	
КонецПроцедуры

Функция ПолучитьТекст() Экспорт

	ТекущееПоле = ЭлементыФормы[мТекущаяСтраница.Имя];
	Если ТипЗнч(ТекущееПоле) = Тип("ПолеВвода") Тогда
		Текст = ТекущееПоле.Значение;
	Иначе
		Текст = ТекущееПоле.ПолучитьТекст();
	КонецЕсли; 
	Возврат Текст;

КонецФункции // ПолучитьТекст()

// <Описание процедуры>
//
// Параметры:
//  <Параметр1>  – <Тип.Вид> – <описание параметра>
//                 <продолжение описания параметра>;
//  <Параметр2>  – <Тип.Вид> – <описание параметра>
//                 <продолжение описания параметра>.
//
Процедура УстановитьТекст(Текст)

	ТекущееПоле = ЭлементыФормы[мТекущаяСтраница.Имя];
	Если ТипЗнч(ТекущееПоле) = Тип("ПолеВвода") Тогда
		ТекущееПоле.Значение = Текст;
		Если СтрДлина(Текст) > 0 Тогда
			ТекущееПоле.УстановитьГраницыВыделения(1, СтрДлина(Текст) + 1);
		КонецЕсли;
	Иначе
		ТекущееПоле.УстановитьТекст(Текст);
	КонецЕсли; 

КонецПроцедуры // УстановитьТекст()


Процедура ПанельОсновнаяПриСменеСтраницы(Элемент, ТекущаяСтраница)
	
	Текст = ПолучитьТекст();
	мТекущаяСтраница = ЭлементыФормы.ПанельОсновная.ТекущаяСтраница; 
	УстановитьТекст(Текст); 
	
КонецПроцедуры

// @@@.КЛАСС.ПолеТекстовогоДокументаСКонтекстнойПодсказкой
// Транслятор обработки событий нажатия на кнопки командной панели в компоненту.
// Является обязательным.
//
// Параметры:
//  Кнопка       – КнопкаКоманднойПанели.
//
Процедура КлсПолеТекстовогоДокументаСКонтекстнойПодсказкойНажатие(Кнопка)
	
	// Имя страницы совпадает с именем поля текстового документа
	Компонента = 0;
	Если ПолеТекстовогоДокументаСКонтекстнойПодсказкой.Свойство(ЭлементыФормы.ПанельОсновная.ТекущаяСтраница.Имя, Компонента) Тогда 
		Компонента.Нажатие(Кнопка);
	КонецЕсли; 
	
КонецПроцедуры

//// @@@.КЛАСС.ПолеТекстовогоДокументаСКонтекстнойПодсказкой
//// Процедура служит для выполнения программы поля текстового документа в локальном контексте.
//// Вызывается из компоненты ирКлсПолеТекстовогоДокументаСКонтекстнойПодсказкой в режиме внутреннего языка.
//// Не является обязательной.
////
//// Параметры:
////  ТекстДляВыполнения – Строка;
////  *ЛиСинтаксическийКонтроль - Булево, *Ложь - признак вызова только для синтаксического контроля.
////
//Функция ВыполнитьЛокально(ТекстДляВыполнения, ЛиСинтаксическийКонтроль = Ложь) Экспорт

//	Выполнить(ТекстДляВыполнения);

//КонецФункции // ВыполнитьЛокально()

Процедура ОсновныеДействияФормыСравнитьТекст(Кнопка)
	
	ирОбщий.СравнитьСодержимоеЭлементаУправленияЛкс(ЭлементыФормы[ЭлементыФормы.ПанельОсновная.ТекущаяСтраница.Имя]);
	
КонецПроцедуры

Процедура ОсновныеДействияФормыДействие(Кнопка)
	
	ПолноеИмяФайла = ирОбщий.ВыбратьФайлЛкс(,,, ПолучитьТекст());
	Если ПолноеИмяФайла = Неопределено Тогда
		Возврат;
	КонецЕсли;
	УстановитьТекст(ПолноеИмяФайла);
	
КонецПроцедуры

Процедура ОсновныеДействияФормыСохранитьВФайл(Кнопка)
	
	ВыборФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Сохранение);
	Если Не ВыборФайла.Выбрать() Тогда
		Возврат;
	КонецЕсли;
	ТекстовыйДокумент = Новый ТекстовыйДокумент;
	ТекстовыйДокумент.УстановитьТекст(ПолучитьТекст());
	ТекстовыйДокумент.Записать(ВыборФайла.ПолноеИмяФайла);
	
КонецПроцедуры

Процедура ОсновныеДействияФормыЗагрузитьИзФайла(Кнопка)
	
	ВыборФайла = Новый ДиалогВыбораФайла(РежимДиалогаВыбораФайла.Открытие);
	Если Не ВыборФайла.Выбрать() Тогда
		Возврат;
	КонецЕсли;
	ТекстовыйДокумент = Новый ТекстовыйДокумент;
	ТекстовыйДокумент.Прочитать(ВыборФайла.ПолноеИмяФайла);
	УстановитьТекст(ТекстовыйДокумент.ПолучитьТекст());

КонецПроцедуры

Процедура СтруктураКоманднойПанелиНажатие(Кнопка)
	
	ирОбщий.ОткрытьСтруктуруКоманднойПанелиЛкс(ЭтаФорма, Кнопка);
	
КонецПроцедуры

Процедура ОбработкаОповещения(ИмяСобытия, Параметр, Источник)
	
	ирОбщий.ФормаОбработкаОповещенияЛкс(ЭтаФорма, ИмяСобытия, Параметр, Источник); 

КонецПроцедуры

Процедура ТолькоПросмотрПриИзменении(Элемент)
	
	ЭтаФорма.ТолькоПросмотр = рТолькоПросмотр;
	ОбновитьДоступность();
	
КонецПроцедуры

Процедура ОбновлениеОтображения()
	
	ОбновитьДоступность();
	
КонецПроцедуры

Процедура ОсновныеДействияФормыОткрытьЧерезXML(Кнопка)
	
	ИмяВременногоФайла = ПолучитьИмяВременногоФайла("XML");
	Текст = ПолучитьТекст();
	ТектовыйДокумент = Новый ТекстовыйДокумент;
	ТектовыйДокумент.УстановитьТекст(Текст);
	ТектовыйДокумент.Записать(ИмяВременногоФайла);
	ЗапуститьПриложение(ИмяВременногоФайла);
	
КонецПроцедуры

ирОбщий.ИнициализироватьФормуЛкс(ЭтаФорма, "Обработка.ирПлатформа.Форма.Текст");

мТекущаяСтраница = ЭлементыФормы.ПанельОсновная.ТекущаяСтраница;
