KVIrcОсновы KVS: Мутим своё дополнение(часть 2).

Продолжаем делать своё супер-пупер дополнение для KVIrc. Сегодня мы добавим кнопки управления проигрывателем и сделаем нашу строку демонстрации настраиваемой.

За управление проигрывателем у нас отвечают команды mediaplayer.play, mediaplayer.stop, mediaplayer.pause, mediaplayer.prev, mediaplayer.next предоставляемые модулем mediaplayer. Создаём в тестере сценариев новые действия для наших команд и добавляем кнопки на панель созданную нами в предыдущей статье.
action.create -t=generic ("nowplaying_play",$tr("Играть"),$tr("Play"),"play.png","")
{
	mediaplayer.play
}
action.create -t=generic ("nowplaying_stop",$tr("Стоп"),$tr("Stop"),"stop.png","")
{
	mediaplayer.stop
}
action.create -t=generic ("nowplaying_pause",$tr("Пауза"),$tr("Pause"),"pause.png","")
{
	mediaplayer.pause
}
action.create -t=generic ("nowplaying_prev",$tr("Предыдущая"),$tr("Rewind"),"prev.png","")
{
	mediaplayer.prev
}
action.create -t=generic ("nowplaying_next",$tr("Следующая"),$tr("Forward"),"next.png","")
{
	mediaplayer.next
}

toolbar.additem now_playing nowplaying_prev
toolbar.additem now_playing nowplaying_play
toolbar.additem now_playing nowplaying_pause
toolbar.additem now_playing nowplaying_stop
toolbar.additem now_playing nowplaying_next


Панелька есть, но какая-то она несуразная получилась. Вместо значков кнопок у нас какието звёздочки нарисованы. Надо это выправлять, ведь мы крутые кодеры.:) Все картинки используемые скриптами у нас лежат в /домашняя_папка_пользователя/.kvirc/pics/(у пользователей MS Windows путь такой C:\Documents and settings\пользователь\Application data\KVIrc\pics\). Рисуем для себя кнопки какие нам по душе, сохраняем их с соответствующими названиями и разрешением 32х32 в данную папку и при следующем запуске панели они будут видны как надо.

Так с панелькой мы закончили. Но наша строка демонстрации желает оставлять лучшего. Ведь надоедает однообразие отображения названия песен да и хочется показать всем немного больше информации о композиции. Конечно мы можем править строку в алиасе np, но мы то не ищем лёгких путей. Создадим свой графический интерфейс для настроек и файл для сохранения параметров чтобы не править их при каждой перезагрузке KVIrc.

Для создания интерфейса мы воспользуемся классом widget, но мы будем писать на его основе свой класс с нужными нам функциями. Наш класс унаследует все его свойства и функции и в тоже время мы добавим свои. Свойства widget можно посмотреть в соответствующем разделе справки. Пояснения я буду писать прям в коде в виде комментариев. Приступим.

//Создаём новый класс при помощи команды class(название,родитель)
class(nowplaying::settings,widget)
{
	// Конструктор класса
	constructor()
	{
		// Задаём размеры виджета 
		$$->$setGeometry(0,0,600,150)
		// Пишем заголовок
		$$->$setCaption("Nowplaying settings")
		// Указываем позицию где наш 
		// виджет разместить.
		$$->$centerToScreen()
		// Добавляем надпись.
		$$->%labelt = $new(label,$$)
		// Текст надписи
		$$->%labelt->$setText("Action text")
		// Размер надписи
		$$->%labelt->$setGeometry(10,10,100,20)
		// Добавляем строку ввода
		$$->%lineeditt = $new(lineedit,$$)
		// Текст по умолчанию
		$$->%lineeditt->$setText("%Show")
		// Размеры строки
		$$->%lineeditt->$setGeometry(110,10,480,20)
		$$->%labelm = $new(label,$$)
		$$->%labelm->$setText("Коды параметров которые можно задать в строке")
		$$->%labelm->$setGeometry(100,50,400,15)
		$$->%label11 = $new(label,$$)
		$$->%label11->$setText("!title -- название композиции")
		$$->%label11->$setGeometry(5,65,190,15)
		$$->%label12 = $new(label,$$)
		$$->%label12->$setText("!artist -- исполнитель")
		$$->%label12->$setGeometry(205,65,190,15)
		$$->%label13 = $new(label,$$)
		$$->%label13->$setText("!album -- название альбома")
		$$->%label13->$setGeometry(405,65,190,15)
		$$->%label21 = $new(label,$$)
		$$->%label21->$setText("!year -- год выпуска композиции")
		$$->%label21->$setGeometry(5,80,190,15)
		$$->%label22 = $new(label,$$)
		$$->%label22->$setText("!bitrate -- битрейт")
		$$->%label22->$setGeometry(205,80,190,15)
		$$->%label23 = $new(label,$$)
		$$->%label23->$setText("!position -- проиграно в %")
		$$->%label23->$setGeometry(405,80,190,15)
		$$->%label32 = $new(label,$$)
		$$->%label32->$setText("!b -- выделить жирным")
		$$->%label32->$setGeometry(205,95,190,15)
		// Добавляем кнопку
		$$->%btSave = $new(button, $$)
		// Текст на кнопке
		$$->%btSave->$setText("Save")
		$$->%btSave->$setGeometry(105,120,90,20)
		$$->%btCancel = $new(button, $$)
		$$->%btCancel->$setText("Cancel")
		$$->%btCancel->$setGeometry(405,120,90,20)
		// Цепляем функцию закрытия на соответствующую кнопку
		objects.connect @%btCancel "clicked" $$ close
		objects.connect @%btSave "clicked" $$ save
		// Показываем наш виджет
		$$->$show()
	}
	// Деструктор класса
	destructor()
	{
		delete $$
	}
	// Функция сохранения параметров
	save()
	{
		// Создаём глобальную переменную и 
		// присваиваем ей содержимое нашего поля ввода
		%Show = $$->%lineeditt->$text
		// Записываем в файл
		file.write $file.localdir\\config\\nowplaying.kvc %Show
		// Закрываем виджет
		$$->$close()
	}
	// Функция закрытия виджета
	close()
	{
		delete $$
	}
}


После выполнения данного кода в тестере сценариев у нас вроде ничего не меняется и не должно. Мы класс написали и зарегистрировали, но пока им не пользуемся. Вызывать наш класс мы будем в действии которое поместим в меню «Инструменты». Чтобы поместить действие в меню «Инструменты» нам надо при его создании указать что оно принадлежит к группе tools.

action.create -t=tools ("nowplaying_settings",$tr("Nowplaying settings"),$tr("Nowplaying settings"),"play.png","")
{
	// Вызываем наш класс
	%np_set = $new(nowplaying::settings)
}


Добавим алиас инициализации нашего дополнения.

alias(nowplaying_init)
{
	if(!$file.exists($file.localdir/config/nowplaying.kvc))
	{
		%str = "listens !artist -- !title[!album]"
		file.write $file.localdir/config/nowplaying.kvc %str
	}
	%Show = $file.readlines($file.localdir/config/nowplaying.kvc)
	mediaplayer.detect
}


Чтобы наши настройки строки не сбивались нам надо их каждый раз читать из файла при запуске KVIrc. Для этого в квирке есть целая куча событий к которым можно привязать тот или иной обработчик. При запуске клиента у нас происходит событие OnKVIrcStartup на него мы и повесим наш обработчик.

event(OnKVIrcStartup,nowplaying)
{
	nowplaying_init
}


Ну вот почти закончили. Осталось нам заставить наш алиас отвечающий за отображение композиции парсить строку параметров.

alias(np)
{
	if($mediaplayer.status() != "stopped")
	{
		if($mediaplayer.artist != "")
		{
			%pos = $($($mediaplayer.position * 100)/$mediaplayer.length)
			%Show = $str.replace(%Play_act,"$mediaplayer.artist","!artist")
			%Show = $str.replace(%Show,"$mediaplayer.album","!album")
			%Show = $str.replace(%Show,"$mediaplayer.bitRate","!bitrate")
			%Show = $str.replace(%Show,"$mediaplayer.title","!title")
			%Show = $str.replace(%Show,"$mediaplayer.year","!year")
			%Show = $str.replace(%Show,"%pos%","!position")
			%Show = $str.replace(%Show,"$b","!b")
			me %Show
		}
		else
		{
			me слушает $mediaplayer.nowplaying
		}
	}
	else
	{
		echo $b$k(4)А проигрыватель включать не пробовал?
	}
}


Вот мы и написали полноценное дополнение к KVIrc. Точнее не совсем ещё полноценное, но уже рабочее. Следующий раз сделаем для него инсталлятор по всем правилам.

Комментарии (0)

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.