Скрипты для foo_uie_wsh_panel_mod

Список разделов foobar2000 Секреты foobar2000

Описание: Кнопочки, конфиги, секреты, советы.

Сообщение #281 kgena_ua » 02.04.2015, 11:19

foo_uie_wsh_panel_mod Версия 1.5.10.
https://github.com/marc2k3/foo_uie_wsh_panel_mod/releases

Добавлено спустя 2 часа 13 минут:
seriousstas:библиотека на WSH, но у неё нет автообновления (автоматической подгрузки новодобавленных папок
seriousstas, в новой версии WSH панель есть новая функция on_library_changed(), только этот скрипт не хочет работать у меня даже на версии 1.5.8.
Добавление такой функции может быть помогло:
function on_library_changed(){
            get_library(1);
            get_pl_tree();           
            repaint_f1 = repaint_f2;
            repaint_main1 = repaint_main2;
}
kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 11 лет 7 месяцев

Сообщение #282 seriousstas » 02.04.2015, 14:03

Спасибо , вот этот парень (http://du22y.deviantart.com/) заделал автообновление :
https://www.dropbox.com/s/zshg61eaneosjqk/library_view_mod3_wsh_1.5.10.avi?dl=0
Правда он использовал не changed а removed и added
seriousstas
Откуда: Украина , Ивано-Франковск
Репутация: 110
С нами: 9 лет 9 месяцев

Сообщение #283 t-s » 02.04.2015, 16:11

kgena_ua,
Может сталкивались - буду признателен за помощь :smile:
Не работает только "память" состояния WSH-кнопки в следующем коде (основан на моей логике)

Код: Выделить всё
function createPRVButton() {
return new Button(хх, хх, хх, хх, fb.PlaybackPreviewMode ? prv_on : prv_off, function () {fb.RunMainMenuCommand("Предварительное прослушивание");}, fb.PlaybackPreviewMode ? "Сбросить прослушивание" : "Прослушивание");
}

Buttons.PRV = createPRVButton();

function on_playback_preview_mode_changed (state) {
   Buttons.PRV = createPRVButton();
   Buttons.PRV.repaint();
}
t-s
Гость

Сообщение #284 t-s » 05.04.2015, 13:13

Аууу ...kgena_ua пропал :cry: , а может еще кто-то может подсказать - где подправить код? :help:, плиз
t-s
Гость

Сообщение #285 kgena_ua » 05.04.2015, 21:54

Ув.t-s, я пока не знаком с этой системой построения кнопок, как в Вашем скрипте, вернее я видел этот принцип построения кнопок, но не совсем понимаю как он работает. В любом случае, если бы знал ответ, то обязательно ответил бы.
kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 11 лет 7 месяцев

Сообщение #286 t-s » 06.04.2015, 12:40

kgena_ua,
Спасибо за отзыв :smile:

kgena_ua:я пока не знаком с этой системой построения кнопок
А я не знаком с другой системой - у меня 4 кнопки, из них эта одна и не работает - просто писал по аналогии

kgena_ua:но не совсем понимаю как он работает
Хороша шутка-юмора :clap: Я вообще писал интуитивно (метод тыка), да и занимался этим давненько - поэтому не скромничайте, называя свой "метод тыка" - этим методом с нуля скрипты не пишутся, а не понимать какие-то моменты - это абсолютно нормально :smile:

Поэтому, если Вам знаком другой вариант кода для WSH-кнопки с "памятью" - я не переборчивый, да и выбирать не приходится - за 6 дней здесь никто ничего и не предложил :help: ,плиз
t-s
Гость

Сообщение #287 iprad » 06.04.2015, 13:01

Код: Выделить всё
function createPRVButton() {
return new Button(хх, хх, хх, хх, fb.PlaybackPreviewMode ? prv_on : prv_off, function () {change_PRVButton(); fb.RunMainMenuCommand("Предварительное прослушивание");}, fb.PlaybackPreviewMode ? "Сбросить прослушивание" : "Прослушивание");
}

function change_PRVButton() {
   window.SetProperty("button_state_PRVButton",!window.GetProperty("button_state_PRVButton",false));
}


Buttons.PRV = createPRVButton();

function on_playback_preview_mode_changed (state) {
   Buttons.PRV = createPRVButton();
   Buttons.PRV.repaint();
}
iprad M
Аватара
Репутация: 89
С нами: 11 лет 8 месяцев

Сообщение #288 t-s » 06.04.2015, 13:25

iprad,
Спасибо за вариант, но "память" так и не заработала - не смотря на двойной "change"

У меня с самого начала было подозрение на
Код: Выделить всё
function on_playback_preview_mode_changed (state) {
   Buttons.PRV = createPRVButton();
   Buttons.PRV.repaint();
}
t-s
Гость

Сообщение #289 iprad » 06.04.2015, 13:29

"память" чего? мне не совсем понятен код кнопки...
prv_on : prv_off - что это за переменные?
iprad M
Аватара
Репутация: 89
С нами: 11 лет 8 месяцев

Сообщение #290 t-s » 06.04.2015, 13:39

iprad:"память" чего? мне не совсем понятен код кнопки...
iprad, "память" состояния, т.е. когда включено "прослушивание" - кнопка подсвечена и при наведении курсора появляется надпись "сбросить прослушивание" и наоборот

Для примера - рабочий функцианал другой кнопки

function createSACButton() {
Код: Выделить всё
return new Button(хх, хх, хх, хх, fb.StopAfterCurrent ? sac_on : sac_off, function () {fb.RunMainMenuCommand("Остановить после текущего");}, fb.StopAfterCurrent ? "Сбросить остановить после текущего трека" : "Остановить после текущего трека");
}
Buttons.SAC = createSACButton();
function on_playlist_stop_after_current_changed(state) {
   Buttons.SAC = createSACButton();
   Buttons.SAC.repaint();
}

Добавлено спустя 3 минуты 13 секунд:
iprad:prv_on : prv_off - что это за переменные?
Да, и не заметил - это задание кнопок
Код: Выделить всё
var prv_on = {normal: imgPath + "PREVon.png", hover: imgPath + "PREVMH.png"};
var prv_off = {normal: imgPath + "PREVoff.png", hover: imgPath + "PREVMH.png"};
t-s
Гость

Сообщение #291 iprad » 06.04.2015, 13:52

код функции Button()?
iprad M
Аватара
Репутация: 89
С нами: 11 лет 8 месяцев

Сообщение #292 t-s » 06.04.2015, 13:55

iprad:код функции Button()?
:insane:
t-s
Гость

Сообщение #293 iprad » 06.04.2015, 14:06

var prv_on = {normal: imgPath + "PREVon.png", hover: imgPath + "PREVMH.png"};
var prv_off = {normal: imgPath + "PREVoff.png", hover: imgPath + "PREVMH.png"};

переменные содержат путь к изображению кнопки (4 файла), а задаётся только 2 файла (fb.PlaybackPreviewMode ? prv_on : prv_off)
при изменении fb.PlaybackPreviewMode нужно менять файлы

return new Button(хх, хх, хх, хх, fb.StopAfterCurrent ? sac_on : sac_off, function () {fb.RunMainMenuCommand("Остановить после текущего");}, fb.StopAfterCurrent ? "Сбросить остановить после текущего трека" : "Остановить после текущего трека"); - это вызов функции Button() с параметрами
iprad M
Аватара
Репутация: 89
С нами: 11 лет 8 месяцев

Сообщение #294 t-s » 06.04.2015, 14:14

iprad:return new Button(хх, хх, хх, хх, fb.StopAfterCurrent ? sac_on : sac_off, function () {fb.RunMainMenuCommand("Остановить после текущего");}, fb.StopAfterCurrent ? "Сбросить остановить после текущего трека" : "Остановить после текущего трека"); - это вызов функции Button() с параметрами

Да, и она задана аналогично
Код: Выделить всё
var sac_on = {normal: imgPath + "SACon.png", hover: imgPath + "SACMH.png"};
var sac_off = {normal: imgPath + "SACoff.png", hover: imgPath + "SACMH.png"};
И в этой кнопке все работает четко (память в том числе) и я привел ее код просто для примера

Добавлено спустя 4 минуты 33 секунды:
iprad:var prv_on = {normal: imgPath + "PREVon.png", hover: imgPath + "PREVMH.png"};var prv_off = {normal: imgPath + "PREVoff.png", hover: imgPath + "PREVMH.png"};переменные содержат путь к изображению кнопки (4 файла), а задаётся только 2 файла (fb.PlaybackPreviewMode ? prv_on : prv_off)при изменении fb.PlaybackPreviewMode нужно менять файлы
Точнее к 3 изображениям - PREVon.png, PREVMH.png, PREVoff.png
t-s
Гость

Сообщение #295 iprad » 06.04.2015, 14:20

это не код кнопки...

В самом начале скрипта будет что-то вроде этого:
// ==PREPROCESSOR==
// @name
// @version
// @author
// @import "%fb2k_path%themes\Vintage\TechnicsRSBX\Script\Common.js"
// ==/PREPROCESSOR==
//======================
какой файл в строке // @import?
iprad M
Аватара
Репутация: 89
С нами: 11 лет 8 месяцев

Сообщение #296 t-s » 06.04.2015, 14:28

iprad:какой файл в строке // @import?

Там несколько импортируется, думаю Вас интересует зтот
Код: Выделить всё
// DarkOne 2 Global Button Script
// Code by T.P Wang and tedGo

var ButtonStates = {normal: 0, hover: 1, down: 2, hide: 3};
var Buttons = {};
var g_down = false;

// ----- CREATE BUTTON OBJECT --------------------------------------
var g_tooltip;

function Button(x, y, w, h, img_src, func, tiptext) {
   this.left = x;
   this.top = y;
   this.w = w;
   this.h = h;
   this.right = x + w;
   this.bottom = y + h;
   this.func = func;
   this.tiptext = tiptext;
   this.state = ButtonStates.normal;
   this.img_normal = img_src && img_src.normal ? gdi.Image(img_src.normal) : null;
   this.img_hover = img_src && img_src.hover ? gdi.Image(img_src.hover) : this.img_normal;
   this.img_down = img_src && img_src.down ? gdi.Image(img_src.down) : this.img_hover;
   this.img = this.img_normal;

   this.alterImage = function(img_src) {
      this.img_normal = img_src && img_src.normal ? gdi.Image(img_src.normal) : null;
      this.img_hover = img_src && img_src.hover ? gdi.Image(img_src.hover) : this.img_normal;
      this.img_down = img_src && img_src.down ? gdi.Image(img_src.down) : this.img_hover;
      this.changeState(this.state);
   }

   this.traceMouse = function(x, y) {
      if (this.state == ButtonStates.hide) return false;

      var b = (this.left < x) && (x < this.right) && (this.top < y) && (y < this.bottom);

      if (b)
         g_down ? this.changeState(ButtonStates.down) : this.changeState(ButtonStates.hover);
      else
         this.changeState(ButtonStates.normal);
      return b;
   }

   this.changeState = function(newstate) {
      newstate != this.state && window.RepaintRect(this.left, this.top, this.w, this.h);
      this.state = newstate;
      switch (this.state) {
         case ButtonStates.normal:
            this.img = this.img_normal;
            break;

         case ButtonStates.hover:
            this.img = this.img_hover;
            break;

         case ButtonStates.down:
            this.img = this.img_down;
            break;

         default:
            this.img = null;
      }
   }

   this.changePos = function(x, y, w, h) {
      this.left = x;
      this.top = y;
      this.w = w;
      this.h = h;
      this.right = x + w;
      this.bottom = y + h;
   }

   this.draw = function(gr) {
      this.img && gr.DrawImage(this.img, this.left, this.top, this.w, this.h, 0, 0, this.w, this.h);
   }

   this.repaint = function() {
      window.RepaintRect(this.left, this.top, this.w, this.h);
   }

   this.onClick = function() {
      this.func && this.func();
   }

   this.onMouseIn = function() {
      g_tooltip = window.CreateTooltip();
      g_tooltip.Text = this.tiptext;
      g_tooltip.Activate();
   }

   this.onMouseOut = function() {
      g_tooltip.Deactivate();
      g_tooltip.Dispose();
   }
}

function buttonsDraw(gr) {
   for (var i in Buttons) {
      Buttons[i].draw(gr);
   }
}

function buttonsTraceMouse(x, y) {
   var btn = null;
   for (var i in Buttons) {
      if (Buttons[i].traceMouse(x, y) && !btn)
         btn = Buttons[i];
   }
   return btn;
}

// ----- MOUSE ACTIONS ---------------------------------------------
var cur_btn = null;
var btn_down;

function on_mouse_move(x, y) {
   var btn = buttonsTraceMouse(x, y);

   if (btn != cur_btn) {
      cur_btn && cur_btn.onMouseOut();
      btn && btn.onMouseIn();
   }

   cur_btn = btn;
}

function on_mouse_lbtn_down(x, y) {
   g_down = true;
   (btn_down = cur_btn) && cur_btn.changeState(ButtonStates.down);
}

function on_mouse_lbtn_up(x, y) {
   if (cur_btn) {
      cur_btn.changeState(ButtonStates.hover);
      btn_down == cur_btn && cur_btn.onClick(x, y);
   }

   g_down = false;
}

function on_mouse_leave() {
   cur_btn && cur_btn.changeState(ButtonStates.normal);
}
t-s
Гость

Сообщение #297 iprad » 06.04.2015, 14:47

Код: Выделить всё
function createPRVButton() {
return new Button(хх, хх, хх, хх, fb.PlaybackPreviewMode ? prv_on : prv_off, function () {fb.RunMainMenuCommand("Предварительное прослушивание");change_PRVButton(); }, fb.PlaybackPreviewMode ? "Сбросить прослушивание" : "Прослушивание");
}

function change_PRVButton() {
   fb.PlaybackPreviewMode ? Buttons.PRV.alterImage(prv_on) : Buttons.PRV.alterImage(prv_off)
   Buttons.PRV.repaint();
}


Buttons.PRV = createPRVButton();

function on_playback_preview_mode_changed (state) {
   Buttons.PRV = createPRVButton();
   Buttons.PRV.repaint();
}
iprad M
Аватара
Репутация: 89
С нами: 11 лет 8 месяцев

Сообщение #298 t-s » 06.04.2015, 14:59

iprad, :cry:
Память так же не работает
t-s
Гость

Сообщение #299 iprad » 06.04.2015, 16:08

function on_playback_preview_mode_changed (state) {
Buttons.PRV.repaint();
}
iprad M
Аватара
Репутация: 89
С нами: 11 лет 8 месяцев

Сообщение #300 t-s » 06.04.2015, 16:26

iprad,
Без изменений :sad:
А все же, если Вы понимаете логику этой функции
Код: Выделить всё
function on_playback_preview_mode_changed (state) {
   Buttons.PRV = createPRVButton();
   Buttons.PRV.repaint();
}
Вас ничего в ней не смущает ..
t-s
Гость

Пред.След.

Вернуться в Секреты foobar2000