KVIrc → Основы KVS: Мутим своё дополнение(часть 2).
Продолжаем делать своё супер-пупер дополнение для KVIrc. Сегодня мы добавим кнопки управления проигрывателем и сделаем нашу строку демонстрации настраиваемой.
За управление проигрывателем у нас отвечают команды mediaplayer.play, mediaplayer.stop, mediaplayer.pause, mediaplayer.prev, mediaplayer.next предоставляемые модулем mediaplayer. Создаём в тестере сценариев новые действия для наших команд и добавляем кнопки на панель созданную нами в предыдущей статье.
Панелька есть, но какая-то она несуразная получилась. Вместо значков кнопок у нас какието звёздочки нарисованы. Надо это выправлять, ведь мы крутые кодеры.:) Все картинки используемые скриптами у нас лежат в /домашняя_папка_пользователя/.kvirc/pics/(у пользователей MS Windows путь такой C:\Documents and settings\пользователь\Application data\KVIrc\pics\). Рисуем для себя кнопки какие нам по душе, сохраняем их с соответствующими названиями и разрешением 32х32 в данную папку и при следующем запуске панели они будут видны как надо.
Так с панелькой мы закончили. Но наша строка демонстрации желает оставлять лучшего. Ведь надоедает однообразие отображения названия песен да и хочется показать всем немного больше информации о композиции. Конечно мы можем править строку в алиасе np, но мы то не ищем лёгких путей. Создадим свой графический интерфейс для настроек и файл для сохранения параметров чтобы не править их при каждой перезагрузке KVIrc.
Для создания интерфейса мы воспользуемся классом widget, но мы будем писать на его основе свой класс с нужными нам функциями. Наш класс унаследует все его свойства и функции и в тоже время мы добавим свои. Свойства widget можно посмотреть в соответствующем разделе справки. Пояснения я буду писать прям в коде в виде комментариев. Приступим.
После выполнения данного кода в тестере сценариев у нас вроде ничего не меняется и не должно. Мы класс написали и зарегистрировали, но пока им не пользуемся. Вызывать наш класс мы будем в действии которое поместим в меню «Инструменты». Чтобы поместить действие в меню «Инструменты» нам надо при его создании указать что оно принадлежит к группе tools.
Добавим алиас инициализации нашего дополнения.
Чтобы наши настройки строки не сбивались нам надо их каждый раз читать из файла при запуске KVIrc. Для этого в квирке есть целая куча событий к которым можно привязать тот или иной обработчик. При запуске клиента у нас происходит событие OnKVIrcStartup на него мы и повесим наш обработчик.
Ну вот почти закончили. Осталось нам заставить наш алиас отвечающий за отображение композиции парсить строку параметров.
Вот мы и написали полноценное дополнение к 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. Точнее не совсем ещё полноценное, но уже рабочее. Следующий раз сделаем для него инсталлятор по всем правилам.
- +7
- alexzulu
- 18 июня 2009, 16:10