Spider Monkey Panel v1.6.1 [13.01.2022]

Список разделов foobar2000 Плагины

Описание: Все о плагинах, компонентах, расширениях

Сообщение #1 foobar2000.club » 01.10.2018, 23:10

Allows to create full-fledged CUI/DUI panels using JavaScript.
Страница плагина: http://foobar2000.org/components/view/foo_spider_monkey_panel
foobar2000.club
Автор темы, Робот
Репутация: 10
С нами: 14 лет 2 месяца


Сообщение #41 SergPuh.68 » 04.01.2020, 20:38

AHAPXICT, смотрел там конечно,пока ладу не дал,думал может где нибудь готовые заготовки есть,пока не нашел,какой то пробел с громкостью у фубара для новичков,плоски уже надоели :smile:
SergPuh.68 M
Аватар
Откуда: Украина
Репутация: 145
С нами: 7 лет 7 месяцев

Сообщение #42 AHAPXICT » 04.01.2020, 21:01

SergPuh.68:готовые заготовки есть,
Не, ну не знаю... Как ладу не дал? Там всё готово, да и ручка один в один как на второй картинке. Я не проверял на SMP, может работает со старта? Сейчас не могу посмотреть, на работе, мой ноут поломался, а на рабочем нет нечего для работы. Это единственный вариант скрипта, другого нет, только подставляй свою картинку и вперёд.
AHAPXICT M
Аватар
Откуда: Киев
Репутация: 252
С нами: 12 лет 9 месяцев

  • 2

Сообщение #43 kutuzof » 04.01.2020, 21:38

SergPuh.68, на скорую руку, дальше разберётесь) путь к картинкам поменяете...
Код: Выделить всё
var configPath = fb.FoobarPath + "themes\\DarkOne4Mod\\";
var imgPath = configPath + "Images\\";
var btn_font = gdi.Font("Arial Black", 7, 0);
var ui_type = window.InstanceType;


window.MinWidth = window.MaxWidth = 58;
window.MinHeight = window.MaxHeight = 90;

var v_change = false;
var g_angle = 270;
var g_R = 20;

// ----- GET UI COLOURS -----
function get_colors() {
   ui_backcol = ui_type == 0 ? window.GetColourCUI(3) : window.GetColourDUI(1);
   ui_textcol = ui_type == 0 ? window.GetColourCUI(0) : window.GetColourDUI(0);
   ui_btntxtcol = ui_type == 0 ? window.GetColourCUI(2) : window.GetColourDUI(0);
}

get_colors();

function on_colors_changed() {
   get_colors();
   window.Repaint();
}

// ----- CREATE THETA -----
function calc_theta(x, y){
   x -= 29;
   y -= 51;
   theta = Math.atan2(y, x) / Math.PI * 180;
   if (theta <= 90 && theta > 45) return g_angle;
   if (theta > 90 && theta < 135) return 0;
   return theta >= 0 ? theta > 90 ? theta - 135 : theta + 225 : theta + 225
}

// ----- DRAW -----
var a_img = gdi.Image(imgPath + "Vol-wheel.png");
var b_img = gdi.Image(imgPath + "Indicator.png");
var c_img = gdi.Image(imgPath + "IndicatorMH.png");
var d_img = gdi.Image(imgPath + "Mute.png");
var g_img;

function on_paint(gr) {
   if (!window.IsTransparent) {
      gr.FillSolidRect(0, 0, window.Width, window.Height, ui_backcol);
      gr.FillGradRect(0, 0, window.Width, 90, 90, RGBA(151, 180, 202, 128), 0);
   }

   gr.GdiDrawText("VOLUME", btn_font, ui_btntxtcol, 0, 10, 58, 16, 33);
   a_img && gr.DrawImage(a_img, 0, 22, 58, 58, 0, 0, a_img.Width, a_img.Height);

   theta = (Math.pow(10, fb.Volume / 50) - 0.001) / 0.999 * g_angle;
   posA = (theta - 45) * Math.PI / 180;
   cosinusA = Math.cos(posA);
   sinusA = Math.sin(posA);
   posX = 27 - cosinusA * g_R;
   posY = 48 - sinusA * g_R;

   g_img = fb.Volume == -100 ? d_img : v_change ? c_img : b_img;
   g_img && gr.DrawImage(g_img, posX, posY, 5, 5, 0, 0, g_img.Width, g_img.Height);
}

// ----- MOUSE ACTIONS -----
var g_drag = false;

function on_mouse_move(x, y){
   if (g_drag){
      d = calc_theta(x, y) / g_angle;
      v = 50 * Math.log(0.99 * d + 0.01) / Math.LN10;
      if (fb.Volume != v) fb.Volume = v;
   }
}

function on_mouse_lbtn_down(x, y){
   g_drag = true;
}

function on_mouse_lbtn_up(x, y){
   on_mouse_move(x,y);
   g_drag = false;
}

function on_mouse_wheel(delta){
   delta > 0 ? fb.VolumeUp() : fb.VolumeDown();
}

var v_st = 0;
var g_timer_v;

function on_mouse_mbtn_up(x,y) {
        if (g_timer_v != null) return;
    if (fb.Volume > -100){
        v_st = 1;
        state = fb.Volume
    } else {
        v_st = 2;
    }
    Vol();
}

function on_mouse_rbtn_up(x, y) {
   var m = window.CreatePopupMenu();
   var q;

   m.AppendMenuItem(fb.Volume == 0 ? 1 : 0, 1, "Up");
   m.AppendMenuItem(fb.Volume == -100 ? 1 : 0, 2, "Down");
   m.AppendMenuItem(fb.Volume == -100 ? 8 : 0, 3, "Volume Mute");
   m.AppendMenuSeparator();
   m.AppendMenuItem(fb.Volume == 0 ? 8 : 0, 4, "Set to -0 db");
   m.AppendMenuItem(fb.Volume == -3 ? 8 : 0, 5, "Set to -3 db");
   m.AppendMenuItem(fb.Volume == -6 ? 8 : 0, 6, "Set to -6 db");
   m.AppendMenuItem(fb.Volume == -9 ? 8 : 0, 7, "Set to -9 db");
   m.AppendMenuItem(fb.Volume == -12 ? 8 : 0, 8, "Set to -12 db");
   m.AppendMenuItem(fb.Volume == -15 ? 8 : 0, 9, "Set to -15 db");
   m.AppendMenuItem(fb.Volume == -18 ? 8 : 0, 10, "Set to -18 db");
   m.AppendMenuItem(fb.Volume == -21 ? 8 : 0, 11, "Set to -21 db");
   m.AppendMenuSeparator();
   m.AppendMenuItem(0, 12, "Configure");

   q = m.TrackPopupMenu(x, y);

   switch (true) {
      case (q == 1):
         fb.VolumeUp();
         break;

      case (q == 2):
         fb.VolumeDown();
         break;

      case (q == 3):
         fb.VolumeMute();
         break;

      case (q == 4):
         fb.RunMainMenuCommand("Playback" + "/" + "Volume" + "/" + "Set to -0 db");
         break;

      case (q == 5):
         fb.RunMainMenuCommand("Playback" + "/" + "Volume" + "/" + "Set to -3 db");
         break;

      case (q == 6):
         fb.RunMainMenuCommand("Playback" + "/" + "Volume" + "/" + "Set to -6 db");
         break;

      case (q == 7):
         fb.RunMainMenuCommand("Playback" + "/" + "Volume" + "/" + "Set to -9 db");
         break;

      case (q == 8):
         fb.RunMainMenuCommand("Playback" + "/" + "Volume" + "/" + "Set to -12 db");
         break;

      case (q == 9):
         fb.RunMainMenuCommand("Playback" + "/" + "Volume" + "/" + "Set to -15 db");
         break;

      case (q == 10):
         fb.RunMainMenuCommand("Playback" + "/" + "Volume" + "/" + "Set to -18 db");
         break;

      case (q == 11):
         fb.RunMainMenuCommand("Playback" + "/" + "Volume" + "/" + "Set to -21 db");
         break;

      case (q == 12):
         window.ShowConfigure();
         break;
   }

   m;
   return true;
}

// ----- EVENTS -----
var v_timer = null;

function on_volume_change(val) {
   if (v_timer) {
      window.ClearTimeout(v_timer);
      v_timer = null;
   }

   v_timer = window.SetTimeout(
      function () {
         window.Repaint();
         window.ClearTimeout(v_timer);
         v_timer = null;
         v_change = false;
      }, 3000);

   v_change = true;
   window.Repaint();
}

function Vol() {
    g_timer_v = window.SetInterval(function(){
    if (v_st == 1) {
    fb.Volume--;
   if (fb.Volume <= -100 ) {v_st = 0; window.ClearInterval(g_timer_v);g_timer_v = null}
    }
    if (v_st == 2) {
    fb.Volume++;
    try {state} catch(e) {state = 0;}
    if (fb.Volume >= state) {v_st = 0; window.ClearInterval(g_timer_v);g_timer_v = null}
    }
    window.Repaint();
    },50);
}
Вложения
Images.rar
(1.98 КБ) Скачиваний: 452
kutuzof M
Аватар
Откуда: г. Орёл, Россия
Репутация: 301
С нами: 9 лет 11 месяцев

Сообщение #44 SergPuh.68 » 04.01.2020, 21:45

AHAPXICT, с WSH номер проходит,с SMP ещё не пробовал,правда под стилистику не подходит но я думаю можно будет подогнать,спасибо.
2020-01-04_203846.jpg

kutuzof, буду разбираться,спасибо.
SergPuh.68 M
Аватар
Откуда: Украина
Репутация: 145
С нами: 7 лет 7 месяцев

Сообщение #45 AHAPXICT » 04.01.2020, 22:10

SergPuh.68, пора бы знать... стилистика - завернул
if (!window.IsTransparent) {
gr.FillSolidRect(0, 0, window.Width, window.Height, RGB(,,,)); // ui_backcol
// gr.FillGradRect(0, 0, window.Width, 90, 90, RGBA(151, 180, 202, 128), 0);
}
Поставь свой фон и убери(заремь) градиент или включи траспарент. И СКМ

Добавлено спустя 10 минут 56 секунд:
kutuzof, забыл даже поздороваться)) Приветствую :beer:
AHAPXICT M
Аватар
Откуда: Киев
Репутация: 252
С нами: 12 лет 9 месяцев

Сообщение #46 kutuzof » 04.01.2020, 22:53

AHAPXICT, тоже приветствую! :beer:
kutuzof M
Аватар
Откуда: г. Орёл, Россия
Репутация: 301
С нами: 9 лет 11 месяцев

Сообщение #47 foobar2000.club » 04.02.2020, 23:10

Вышла новая версия плагина: Spider Monkey Panel v1.2.3 [04.02.2020]
foobar2000.club
Автор темы, Робот
Репутация: 10
С нами: 14 лет 2 месяца

Сообщение #48 Aliado_71 » 14.02.2020, 10:57

Spider Monkey Panel v1.2.3 + Library Tree 2.1.3 если выбрать View by Folder Structure при добавлении музыки в плейлист - неправильная сортировка треков, причем рипы image + cue сортируются правильно. Дефолтный плагин Album list, а также Java script panel 2.3.5 + Library Tree 1.4.0.4 - добавляет треки в плейлист правильно. Если у кого нибудь подобные проблемы?
Вложения
2020-02-14_105501.jpg
Aliado_71 M
Аватар
Репутация: 202
С нами: 11 лет 5 месяцев

Сообщение #49 TheQwertiest » 14.02.2020, 15:20

Aliado_71, работает ли сортировка корректно на SMP v1.2.2? Если нет, то проблема в скрипте и нужно обращаться к его автору.
TheQwertiest
Репутация: 4
С нами: 8 лет 4 месяца

Сообщение #50 Aliado_71 » 14.02.2020, 16:17

TheQwertiest, проверил на SMP v1.2.2 работает корректно. (первый скрин) на SMP v1.2.3 не корректно (второй скрин)
Вложения
2020-01.jpg
2020-02.jpg
Aliado_71 M
Аватар
Репутация: 202
С нами: 11 лет 5 месяцев

Сообщение #51 TheQwertiest » 14.02.2020, 16:18

Aliado_71, значит бага в SMP, будем смотреть.
TheQwertiest
Репутация: 4
С нами: 8 лет 4 месяца

Сообщение #52 LUR » 14.02.2020, 16:39

TheQwertiest, кстати там marc2k3 удалил свои репозитории, теперь сетап для сборки из-за проекта smp_2003 не работает. Решил тут на досуге все-таки поковырять SMP для своего сплиттера. Я то зависимость убрал, но может стоит подправить...
LUR M
Модератор
Аватар
Откуда: Минск
Репутация: 433
С нами: 13 лет 9 месяцев

Сообщение #53 TheQwertiest » 14.02.2020, 21:39

LUR, благо marc2k3 залил этот репозиторий в полном виде на HA (включая даже дополнительные правки, которые не успели войти в релиз SMP), поэтому ничего не потеряно окончательно.

Решил тут на досуге все-таки поковырять SMP
Удачи =) Обращайтесь, если будут вопросы.
TheQwertiest
Репутация: 4
С нами: 8 лет 4 месяца

Сообщение #54 TheQwertiest » 18.02.2020, 14:51

Aliado_71, исправлено в Nightly сборке.
LUR, исправлено в ветке master.
TheQwertiest
Репутация: 4
С нами: 8 лет 4 месяца

Сообщение #55 SergPuh.68 » 12.03.2020, 09:59

Привет,можно ли где нибудь найти скрипт для отображения системного времени в сборке для Spider Monkey Panel v1.2.3 такого плана:
2020-03-12_084857.png
2020-03-12_084857.png (71.33 КБ) Просмотров: 4116

Или для PSS было бы ещё лучше(функцию)Может у кого нибудь есть решение,может кто нибудь сможет переделать скрипт
Спойлер
// ==PREPROCESSOR==
// @name "Timer & Alarm clock"
// @author "kgena_ua"
// ==/PREPROCESSOR==

function RGB(r,g,b) { return (0xff000000|(r<<16)|(g<<8)|(b)); }
var font = gdi.Font("Segoe UI",15,1);
var font2 = gdi.Font("Segoe UI",15,1);
var ww, wh;

DT_LEFT = 0x00000000;
DT_RIGHT = 0x00000002;
DT_CENTER = 0x00000001;
DT_VCENTER = 0x00000004;
DT_SINGLELINE = 0x00000020;
DT_WORD_ELLIPSIS = 0x00040000;

MF_ENABLED = 0x00000000;
MF_GRAYED = 0x00000001;
MF_CHECKED = 0x00000008;
MF_SEPARATOR = 0x00000800;
MF_MENUBREAK = 0x00000040;

var bgcolor = RGB(0,0,0);

var on_mouse = false;

var play_color = RGB(221,221,221);
var stop_color = RGB(221,221,221);

var m_off_color = RGB(221,221,221);
var m_on_color = RGB(221,221,221);

var current_color;

var playback = window.GetProperty("playback", "play");
var type_of_clock = window.GetProperty("type_of_clock", "alarm");

var set_timer = 0;
var set_h = "";
var set_m = "";
var set_s = "";

var timer_started = false;
var stop_timer = false;

var current_date;
var current_txt = "";
var text_show = true;
var text_anim = false;

var volume_txt = "";
var volume_state;
var volume_ch = false;

var img_path = fb.ProfilePath + "\\maybe\\textures\\timer\\";

var clock_timer = window.SetInterval(on_timer, 1000);

function on_paint(gr){
!window.IsTransparent && gr.FillSolidRect(0, 0, ww, wh, bgcolor);

if (timer_started || volume_ch) {
current_color = playback == "play" ? play_color : stop_color;
} else {
current_color = on_mouse ? m_on_color : m_off_color;
}

if (text_show) {
gr.GdiDrawText(current_txt, font, current_color, 0, 0, ww, wh, DT_SINGLELINE | DT_CENTER | DT_VCENTER | DT_WORD_ELLIPSIS );
}

if (timer_started || volume_ch) {
var img = gdi.Image(img_path + type_of_clock + "_" + playback + ".png");

var txt_width = gr.CalcTextWidth(sec2time(current_date), font);
var h_img = 16 - 2;
var y_img = wh / 2 - h_img / 2;
var x_img = ww / 2 - txt_width / 2 - 25;

img && gr.DrawImage( img, x_img, y_img, 16, 16, 0, 0, 16, 16, 0, 255);
}
}

function sec2time(sec) {
var h, m, s;
h = Math.floor(sec / 3600);
m = Math.floor((sec - h * 3600) / 60);
s = sec - h * 3600 - m * 60;
if ( h < 10 ) h = "0" + h;
if ( m < 10 ) m = "0" + m;
if ( s < 10 ) s = "0" + s;
return h + " : " + m + " : " + s;
}

function on_mouse_rbtn_up (x, y){
var _menu = window.CreatePopupMenu();
var _group_1 = window.CreatePopupMenu();
var _group_2 = window.CreatePopupMenu();
var _group_3 = window.CreatePopupMenu();

_menu.AppendMenuItem(MF_ENABLED, 10, timer_started ? "stop timer" : sec2time(set_timer));

_menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
MF_STATE = timer_started ? MF_GRAYED : MF_ENABLED;

_group_1.AppendTo(_menu, MF_STATE, "hours :");
for (var i = 20; i <= 29; i++) {
_group_1.AppendMenuItem(MF_ENABLED | MF_MENUBREAK, i, i - 20);
}

_group_2.AppendTo(_menu, MF_STATE, "minutes :");
for (var i = 30; i <= 39; i++) {
_group_2.AppendMenuItem(MF_ENABLED | MF_MENUBREAK, i, i - 30);
}

_group_3.AppendTo(_menu, MF_STATE, "seconds :");
for (var i = 40; i <= 49; i++) {
_group_3.AppendMenuItem(MF_ENABLED | MF_MENUBREAK, i, i - 40);
}

_menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
MF_STATE3 = !timer_started ? MF_ENABLED : MF_GRAYED;
_menu.AppendMenuItem(MF_STATE3, 60, playback);
_menu.AppendMenuItem(MF_SEPARATOR, 0, 0);

MF_STATE4 = type_of_clock == "timer" && !timer_started ? MF_CHECKED : !timer_started ? MF_ENABLED : MF_GRAYED;
_menu.AppendMenuItem(MF_STATE4, 70, "timer");
MF_STATE5 = type_of_clock == "alarm" && !timer_started ? MF_CHECKED : !timer_started ? MF_ENABLED : MF_GRAYED;
_menu.AppendMenuItem(MF_STATE5, 80, "alarm clock");

_menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
_menu.AppendMenuItem(MF_ENABLED, 200, "Properties");
_menu.AppendMenuItem(MF_ENABLED, 210, "Configure...");

ret = _menu.TrackPopupMenu(x + 20, y - 50);

switch (ret) {
case 10:
if (!timer_started){
set_timer = type_of_clock == "timer" && set_timer == 0 ? 86400 : set_timer;
timer_started = true;
} else {
set_timer = 0;
set_h = "";
set_m = "";
set_s = "";
timer_started = false;
}
break;
}

if (ret >= 20 && ret <= 49){
if (ret >= 20 && ret <= 29){
set_h = set_h.toString(10).length >= 2 ? "" : set_h;
set_h = set_h.toString(10) + (ret - 20).toString(10);
set_h = parseInt(set_h, 10)
set_h = set_h >= 24 ? 23 : set_h;
}

if (ret >= 30 && ret <= 39){
set_m = set_m.toString(10).length >= 2 ? "" : set_m;
set_m = set_m.toString(10) + (ret - 30).toString(10);
set_m = parseInt(set_m, 10)
//set_m = set_m >= 60 ? 59 : set_m;
}

if (ret >= 40 && ret <= 49){
set_s = set_s.toString(10).length >= 2 ? "" : set_s;
set_s = set_s.toString(10) + (ret - 40).toString(10);
set_s = parseInt(set_s, 10)
//set_s = set_s >= 60 ? 59 : set_s;
}

set_timer =set_h * 3600 + set_m * 60 + set_s;

if (set_timer >= 86400){
set_timer = 86400;
set_h = "";
set_m = "";
set_s = "";
}
on_mouse_rbtn_up(x, y);
}

switch (ret) {
case 60:
playback = playback == "play" ? "stop" : "play";
window.SetProperty("playback", playback);
on_mouse_rbtn_up(x, y);
break;
case 70:
type_of_clock = "timer";
window.SetProperty("type_of_clock", type_of_clock);
on_mouse_rbtn_up(x, y);
break;
case 80:
type_of_clock = "alarm";
window.SetProperty("type_of_clock", type_of_clock);
on_mouse_rbtn_up(x, y);
break;
case 200:
window.ShowProperties();
break;
case 210:
window.ShowConfigure();
break;
}
_menu.Dispose();
_group_1.Dispose();
_group_2.Dispose();
_group_3.Dispose();

if (!timer_started) {
set_timer = 0;
set_h = "";
set_m = "";
set_s = "";
}
return true;
}

function on_mouse_move(x, y) {
on_mouse = true;
window.SetCursor(32649);
window.Repaint();
}

function on_mouse_leave() {
on_mouse = false;
window.SetCursor(32512);
window.Repaint();
}

function on_size(){
ww = window.Width;
wh = window.Height;
}

function text_blinking() {
ms = 0;
var blinking_timer = window.SetInterval(function() {
ms = ms + 1;

if (ms >= 7) {text_show = false};
if (ms >= 10) {
text_show = true;
ms = 0;
}

if (!timer_started) {
text_show = true;
text_anim = false;
window.ClearInterval(blinking_timer);
}
window.Repaint();
}, 100 )
}

function Vol(v) {
var volume_timer = window.SetInterval(function(){
volume_ch = true;
if (v == "on") {
fb.Volume++;
if (fb.Volume >= volume_state ) {
window.ClearInterval(volume_timer);
volume_ch = false;
}
}
if (v == "off") {
fb.Volume--;
if (fb.Volume <= -100 ) {
fb.Stop();
fb.Volume = volume_state;
window.ClearInterval(volume_timer);
volume_ch = false;
}
}
}, 50);
}

function on_timer(id) {
d = new Date();
current_date = (d.getHours() * 3600) + (d.getMinutes() * 60) + d.getSeconds();

current_txt = !volume_ch ? sec2time(current_date) : volume_txt;

if (timer_started) {
if (type_of_clock == "timer") {
set_timer = set_timer - 1;
}

current_txt = !volume_ch ? sec2time(set_timer) : volume_txt;

var event_1 = type_of_clock == "timer" ? set_timer <= 10 : Math.abs(set_timer - current_date) <= 10;

if (event_1 && !text_anim) {
text_anim = true;
text_blinking();
}

var event_2 = type_of_clock == "timer" ? set_timer <= 0 : Math.abs(set_timer - current_date) <= 0;

if (event_2) {
if (playback == "play" && !fb.IsPlaying) {
volume_state = fb.Volume;
fb.Volume = -100;
fb.Play();
volume_txt = "PLAY";
Vol("on");
}
if (playback == "stop" && fb.IsPlaying) {
volume_state = fb.Volume;
volume_txt = "STOP";
Vol("off");
}
set_timer = 0;
timer_started = false;
set_h = "";
set_m = "";
set_s = "";
}
}
window.Repaint();
}
для Spider Monkey Panel v1.2.3
Аналоговые часики тоже хорошо.
SergPuh.68 M
Аватар
Откуда: Украина
Репутация: 145
С нами: 7 лет 7 месяцев

Сообщение #56 TheQwertiest » 12.03.2020, 12:52

SergPuh.68:Может у кого нибудь есть решение,может кто нибудь сможет переделать скрипт
https://theqwertiest.github.io/foo_spider_monkey_ ... es/jsp_to_smp_migration_guide/
TheQwertiest
Репутация: 4
С нами: 8 лет 4 месяца

Сообщение #57 SergPuh.68 » 13.03.2020, 10:56

Скрипт "Timer & Alarm clock" author "kgena_ua"
Спойлер
// ==PREPROCESSOR==
// @name "Timer & Alarm clock"
// @author "kgena_ua"
// ==/PREPROCESSOR==

function RGB(r,g,b) { return (0xff000000|(r<<16)|(g<<8)|(b)); }
var font = gdi.Font("Calibri",18,1);
var font2 = gdi.Font("Calibri",18,1);
var ww, wh;

DT_LEFT = 0x00000000;
DT_RIGHT = 0x00000002;
DT_CENTER = 0x00000001;
DT_VCENTER = 0x00000004;
DT_SINGLELINE = 0x00000020;
DT_WORD_ELLIPSIS = 0x00040000;

MF_ENABLED = 0x00000000;
MF_GRAYED = 0x00000001;
MF_CHECKED = 0x00000008;
MF_SEPARATOR = 0x00000800;
MF_MENUBREAK = 0x00000040;

var bgcolor = RGB(32,32,32);

var on_mouse = false;

var play_color = RGB(128,255,128);
var stop_color = RGB(255,175,89);

var m_off_color = RGB(215,215,215);
var m_on_color = RGB(215,215,215);

var current_color;

var playback = window.GetProperty("playback", "play");
var type_of_clock = window.GetProperty("type_of_clock", "alarm");

var set_timer = 0;
var set_h = "";
var set_m = "";
var set_s = "";

var timer_started = false;
var stop_timer = false;

var current_date;
var current_txt = "";
var text_show = true;
var text_anim = false;

var volume_txt = "";
var volume_state;
var volume_ch = false;

var img_path = fb.ProfilePath + "\\maybe\\textures\\timer\\";

var clock_timer = window.SetInterval(on_timer, 1000);

function on_paint(gr){
!window.IsTransparent && gr.FillSolidRect(0, 0, ww, wh, bgcolor);

if (timer_started || volume_ch) {
current_color = playback == "play" ? play_color : stop_color;
} else {
current_color = on_mouse ? m_on_color : m_off_color;
}

if (text_show) {
gr.GdiDrawText(current_txt, font, current_color, 0, 0, ww, wh, DT_SINGLELINE | DT_CENTER | DT_VCENTER | DT_WORD_ELLIPSIS );
}

if (timer_started || volume_ch) {
var img = gdi.Image(img_path + type_of_clock + "_" + playback + ".png");

var txt_width = gr.CalcTextWidth(sec2time(current_date), font);
var h_img = 16 - 2;
var y_img = wh / 2 - h_img / 2;
var x_img = ww / 2 - txt_width / 2 - 25;

img && gr.DrawImage( img, x_img, y_img, 16, 16, 0, 0, 16, 16, 0, 255);
}
}

function sec2time(sec) {
var h, m, s;
h = Math.floor(sec / 3600);
m = Math.floor((sec - h * 3600) / 60);
s = sec - h * 3600 - m * 60;
if ( h < 10 ) h = "0" + h;
if ( m < 10 ) m = "0" + m;
if ( s < 10 ) s = "0" + s;
return h + " : " + m + " : " + s;
}

function on_mouse_rbtn_up (x, y){
var _menu = window.CreatePopupMenu();
var _group_1 = window.CreatePopupMenu();
var _group_2 = window.CreatePopupMenu();
var _group_3 = window.CreatePopupMenu();

_menu.AppendMenuItem(MF_ENABLED, 10, timer_started ? "stop timer" : sec2time(set_timer));

_menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
MF_STATE = timer_started ? MF_GRAYED : MF_ENABLED;

_group_1.AppendTo(_menu, MF_STATE, "hours :");
for (var i = 20; i <= 29; i++) {
_group_1.AppendMenuItem(MF_ENABLED | MF_MENUBREAK, i, i - 20);
}

_group_2.AppendTo(_menu, MF_STATE, "minutes :");
for (var i = 30; i <= 39; i++) {
_group_2.AppendMenuItem(MF_ENABLED | MF_MENUBREAK, i, i - 30);
}

_group_3.AppendTo(_menu, MF_STATE, "seconds :");
for (var i = 40; i <= 49; i++) {
_group_3.AppendMenuItem(MF_ENABLED | MF_MENUBREAK, i, i - 40);
}

_menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
MF_STATE3 = !timer_started ? MF_ENABLED : MF_GRAYED;
_menu.AppendMenuItem(MF_STATE3, 60, playback);
_menu.AppendMenuItem(MF_SEPARATOR, 0, 0);

MF_STATE4 = type_of_clock == "timer" && !timer_started ? MF_CHECKED : !timer_started ? MF_ENABLED : MF_GRAYED;
_menu.AppendMenuItem(MF_STATE4, 70, "timer");
MF_STATE5 = type_of_clock == "alarm" && !timer_started ? MF_CHECKED : !timer_started ? MF_ENABLED : MF_GRAYED;
_menu.AppendMenuItem(MF_STATE5, 80, "alarm clock");

_menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
_menu.AppendMenuItem(MF_ENABLED, 200, "Properties");
_menu.AppendMenuItem(MF_ENABLED, 210, "Configure...");

ret = _menu.TrackPopupMenu(x + 20, y - 50);

switch (ret) {
case 10:
if (!timer_started){
set_timer = type_of_clock == "timer" && set_timer == 0 ? 86400 : set_timer;
timer_started = true;
} else {
set_timer = 0;
set_h = "";
set_m = "";
set_s = "";
timer_started = false;
}
break;
}

if (ret >= 20 && ret <= 49){
if (ret >= 20 && ret <= 29){
set_h = set_h.toString(10).length >= 2 ? "" : set_h;
set_h = set_h.toString(10) + (ret - 20).toString(10);
set_h = parseInt(set_h, 10)
set_h = set_h >= 24 ? 23 : set_h;
}

if (ret >= 30 && ret <= 39){
set_m = set_m.toString(10).length >= 2 ? "" : set_m;
set_m = set_m.toString(10) + (ret - 30).toString(10);
set_m = parseInt(set_m, 10)
//set_m = set_m >= 60 ? 59 : set_m;
}

if (ret >= 40 && ret <= 49){
set_s = set_s.toString(10).length >= 2 ? "" : set_s;
set_s = set_s.toString(10) + (ret - 40).toString(10);
set_s = parseInt(set_s, 10)
//set_s = set_s >= 60 ? 59 : set_s;
}

set_timer =set_h * 3600 + set_m * 60 + set_s;

if (set_timer >= 86400){
set_timer = 86400;
set_h = "";
set_m = "";
set_s = "";
}
on_mouse_rbtn_up(x, y);
}

switch (ret) {
case 60:
playback = playback == "play" ? "stop" : "play";
window.SetProperty("playback", playback);
on_mouse_rbtn_up(x, y);
break;
case 70:
type_of_clock = "timer";
window.SetProperty("type_of_clock", type_of_clock);
on_mouse_rbtn_up(x, y);
break;
case 80:
type_of_clock = "alarm";
window.SetProperty("type_of_clock", type_of_clock);
on_mouse_rbtn_up(x, y);
break;
case 200:
window.ShowProperties();
break;
case 210:
window.ShowConfigure();
break;
}
if (!timer_started) {
set_timer = 0;
set_h = "";
set_m = "";
set_s = "";
}
return true;
}

function on_mouse_move(x, y) {
on_mouse = true;
window.SetCursor(32649);
window.Repaint();
}

function on_mouse_leave() {
on_mouse = false;
window.SetCursor(32512);
window.Repaint();
}

function on_size(){
ww = window.Width;
wh = window.Height;
}

function text_blinking() {
ms = 0;
var blinking_timer = window.SetInterval(function() {
ms = ms + 1;

if (ms >= 7) {text_show = false};
if (ms >= 10) {
text_show = true;
ms = 0;
}

if (!timer_started) {
text_show = true;
text_anim = false;
window.ClearInterval(blinking_timer);
}
window.Repaint();
}, 100 )
}

function Vol(v) {
var volume_timer = window.SetInterval(function(){
volume_ch = true;
if (v == "on") {
fb.Volume++;
if (fb.Volume >= volume_state ) {
window.ClearInterval(volume_timer);
volume_ch = false;
}
}
if (v == "off") {
fb.Volume--;
if (fb.Volume <= -100 ) {
fb.Stop();
fb.Volume = volume_state;
window.ClearInterval(volume_timer);
volume_ch = false;
}
}
}, 50);
}

function on_timer(id) {
d = new Date();
current_date = (d.getHours() * 3600) + (d.getMinutes() * 60) + d.getSeconds();

current_txt = !volume_ch ? sec2time(current_date) : volume_txt;

if (timer_started) {
if (type_of_clock == "timer") {
set_timer = set_timer - 1;
}

current_txt = !volume_ch ? sec2time(set_timer) : volume_txt;

var event_1 = type_of_clock == "timer" ? set_timer <= 10 : Math.abs(set_timer - current_date) <= 10;

if (event_1 && !text_anim) {
text_anim = true;
text_blinking();
}

var event_2 = type_of_clock == "timer" ? set_timer <= 0 : Math.abs(set_timer - current_date) <= 0;

if (event_2) {
if (playback == "play" && !fb.IsPlaying) {
volume_state = fb.Volume;
fb.Volume = -100;
fb.Play();
volume_txt = "PLAY";
Vol("on");
}
if (playback == "stop" && fb.IsPlaying) {
volume_state = fb.Volume;
volume_txt = "STOP";
Vol("off");
}
set_timer = 0;
timer_started = false;
set_h = "";
set_m = "";
set_s = "";
}
}
window.Repaint();
}
Отображает системное время.Так же можно настроить включение и отключение воспроизведение по таймеру или в определённое время.
Полностью настраиваемая цветовая схема и шрифты.
Не знаю как у меня получилось но он теперь работает и на Spider Monkey Panel v1.2.3 :biggrin:
2020-03-13_095855.png
2020-03-13_095855.png (2.82 КБ) Просмотров: 4055
SergPuh.68 M
Аватар
Откуда: Украина
Репутация: 145
С нами: 7 лет 7 месяцев

Сообщение #58 VlaKor » 23.04.2020, 21:09

Здравствуйте!
Помогите разобраться пожалуйста.
Есть простой пример скрипта:
Спойлер
// @name "VlaKor Text NowPlaying"
include(`${fb.ComponentPath}docs\\Flags.js`);
include(`${fb.ComponentPath}docs\\Helpers.js`);

const font = gdi.Font('Segoe UI', 14, 0);
const title = fb.TitleFormat('%title%');
const nazvanie = fb.TitleFormat('Название');
const ispolnitel = fb.TitleFormat('Исполнитель');
const artist = fb.TitleFormat('[%artist%]');
const album = fb.TitleFormat('%album%[ (%DISCSUBTITLE%)][ © %date% / %ORIGINALYEAR%]');
const albom = fb.TitleFormat('Альбом');
let handle = fb.GetNowPlaying();



function on_playback_new_track() {
handle = fb.GetNowPlaying();
window.Repaint();
}






function on_paint(gr) {
if (handle) {
gr.GdiDrawText(title.EvalWithMetadb(handle), font, RGB(0, 0, 0), 130, -20, window.Width, window.Height, DT_VCENTER | DT_LEFT | DT_END_ELLIPSIS | DT_CALCRECT | DT_NOPREFIX);
gr.GdiDrawText(nazvanie.EvalWithMetadb(handle), font, RGB(0, 102, 204), 55, -20, window.Width, window.Height, DT_VCENTER | DT_LEFT | DT_END_ELLIPSIS | DT_CALCRECT | DT_NOPREFIX);
gr.GdiDrawText(ispolnitel.EvalWithMetadb(handle), font, RGB(0, 102, 204), 35, 0, window.Width, window.Height, DT_VCENTER | DT_LEFT | DT_END_ELLIPSIS | DT_CALCRECT | DT_NOPREFIX);
gr.GdiDrawText(artist.EvalWithMetadb(handle), font, RGB(0, 0, 0), 130, 0, window.Width, window.Height, DT_VCENTER | DT_LEFT | DT_END_ELLIPSIS | DT_CALCRECT | DT_NOPREFIX);
gr.GdiDrawText(albom.EvalWithMetadb(handle), font, RGB(0, 102, 204), 68, 20, window.Width, window.Height, DT_VCENTER | DT_LEFT | DT_END_ELLIPSIS | DT_CALCRECT | DT_NOPREFIX);
gr.GdiDrawText(album.EvalWithMetadb(handle), font, RGB(0, 0, 0), 130, 20, window.Width, window.Height, DT_VCENTER | DT_LEFT | DT_END_ELLIPSIS | DT_CALCRECT | DT_NOPREFIX);

}
}

На данный момент скрипт выводит информацию о проигрываемом треке, поле остановки воспроизведения ничего не выводится.
Что необходимо добавить, что бы после остановки воспроизведения отображалась информация под курсором?

Добавить мозги - не предлагать ))
VlaKor
Репутация: 9
С нами: 8 лет 11 месяцев

Сообщение #59 foobar2000.club » 18.07.2020, 23:10

Вышла новая версия плагина: Spider Monkey Panel v1.3.1 [18.07.2020]
foobar2000.club
Автор темы, Робот
Репутация: 10
С нами: 14 лет 2 месяца

Сообщение #60 NikosColev » 07.08.2020, 16:59

Так задумано, что в Volbar with GdiDrawText.js по ЛКМ устанавливается 100% громкость?
Изображение
В JScript Panel по ЛКМ уровень выставляется корректно, - там где кликнул.
NikosColev
Аватар
Откуда: net
Репутация: 1
С нами: 20 лет 2 месяца

cron