Перейти к содержанию
  • записи
    104
  • комментариев
    125
  • просмотров
    15 688

[CE Lua Plugin] Компактный режим через ООП в Lua


MasterGH

488 просмотров

Ниже находится обучающий пример плагина для CE Lua с установкой компактного режима применяя парадигму ООП — инкапсуляции.

 

Для программирования плагинов на Lua могут пригодится приемы ООП. Это касается сущностей, их поведений и взаимодействий между ними.  В данном примере CECompactView — описание класса на основе мета-таблицы и оно является сущностью. Функции класса — uncompact() и compact(), которые реализуют поведения этой сущности. Основной скрипт с описанием сущности можно поместить в отдельный файл .lua и далее можно кратко инициализировать сущность и управлять ей

 

Например

Спойлер
-- Создание экземпляра класса через new() функцию, где аргументом является состояние компактный или некомпактный
ce_compact_view = CECompactView:new(true)

-- Проверить состояние
--print(ce_compact_view:get_state() and 'Compact View Mode' or 'Full View Mode')

-- Установить компактный режим
--ce_compact_view:compact()

-- Установить не компактный режим
--ce_compact_view:uncompact()

 

 

Сам класс или мета-таблица.

 

Спойлер

 

-- Класс инкапсулирующий поведения компактного состояния окна CE
CECompactView = {}

function CECompactView:new(state)

	local obj = {}
	
	-- Состояние компактное или нет: true или false
	obj.compact_mode = state
	
	-- Форма CE, где getMainForm — поддерживаемая функция CE и возвращает главную форму CE
	obj.form_ce = getMainForm()
	
	-- Получение элементов контекстного меню главной формы
	local menu_items = obj.form_ce.menu.items
	
	-- Создание нового контекстного меню с названием CompactView и именем ItemCompact
	obj.menu_item_compact = createMenuItem(menu_items)
	obj.menu_item_compact.name = 'ItemCompact'
	obj.menu_item_compact.caption = 'CompactView'
	
	-- Добавление контекстного меню на главную форму
	menu_items.add(obj.menu_item_compact)

	-- Сменить состояние окна CE: компактное или нет
	function obj:set(state)
		-- view_components состояния скрытия компонентов
		obj.compact_mode = state
		-- видимость компонентов обратна компактному режиму
		local view_components = not state
		obj.form_ce.panel1.visible = view_components
		obj.form_ce.panel4.visible = view_components
		obj.form_ce.panel5.visible = view_components
		obj.form_ce.Splitter1.visible = view_components
		-- Записать имя по состоянию
		obj.menu_item_compact.caption = state and 'Full View Mode' or 'Compact View Mode' 
		-- Поставить обработчик по состоянию
		obj.menu_item_compact.onClick = state and obj.compact or obj.uncompact
		
		print(state and 'Compact View Mode' or 'Full View Mode')
	end

	-- Некопактное окно CE
	function obj:uncompact()
		obj:set(true)
	end

	-- Компактное окно CE
	function obj:compact()
		obj:set(false)
	end

	-- Состояние окна CE: компактное или нет
	function obj:get_state()
		return obj.compact_mode
	end

	-- Связь таблицы (смотрим докуметацию по Lua)
	setmetatable(obj, self)
	obj.__index = self

	-- Активировать состояние
	obj:set(state)

	-- Возвращает ссылку на экземпляр
	return obj
end
------------

-- Создание экземпляра класса
ce_compact_view = CECompactView:new(true)

-- Проверить состояние
--print(ce_compact_view:get_state() and 'Compact View Mode' or 'Full View Mode')

-- Установить компактный режим
--ce_compact_view:compact()

-- Установить не компактный режим
--ce_compact_view:uncompact()

 

 

Скрипт можно сохранить в Lua файл и добавить в папку autorun.

Для интересующихся наследованием и полиморфизмом об этом есть в моем блоге (где-то в начале).

0 Комментариев


Рекомендуемые комментарии

Комментариев нет

Пожалуйста, войдите, чтобы комментировать

Вы сможете оставить комментарий после входа в



Войти
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, Вы автоматически соглашаетесь соблюдать наши Условия использования.