JSplitter v4.3.4 / 3.9.7 [07.10.2026]

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

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

  • 12

Сообщение #1 LUR » 21.03.2018, 05:06

Плагин представляет собой панель, совмещающую функциональность сплиттера (контейнера для панелей других плагинов) и хоста скриптов JavaScript.

Особенности функционала:

1. Панели добавляются в сплиттер в произвольном порядке, где с ними можно работать как с обычными окнами Windows, а именно: перемещать, изменять их размер, сворачивать, разворачивать, закрывать. Т.е. при работе с плагином foobar2000 превращается в приложение с MDI интерфейсом (Multi Document Interface). Для точного позиционирования панелей предусмотрено отображение координат и их редактирование "на лету" в заголовке окна панели (полезно при дизайне интерфейса сборки). Также имеется возможность настраивать цвета и шрифт заголовка окон панелей.
Функциональность сплиттера работает как в DUI, так и в CUI.

1.PNG


2. Поддерживается режим редактирования разметки как в DUI так и в CUI в традиционной для них манере. Поддерживается также управление размещением панелей в сплиттере через стандартный "размещатель" Columns UI.
3. В основе хоста скриптов лежит Spider Monkey Panel от TheQwertiest, соответственно имеет все возможности данной панели + дополнительные расширения API, касающиеся сплиттера. Также в проект активно вносятся изменения из "мода" Spider Monkey Panel за авторством marc2k3
4. Поддерживается управление панелями в сплиттере из скриптов. Возможно программно перемещать, скрывать, изменять размер панелей.
5. Имеется специальное API для быстрого создания кнопок в корне панели и обработки их нажатия.

ПРИМЕЧАНИЕ О ВЕРСИЯХ
Ввиду того, что последней ESR (Extended Support Release) версией движка JavaScript SpiderMonkey, поддерживающей Windows 7, является 102.15.1esr, решено сделать форк основной версии JSplitter и сделать из него ветку 3.x. Все изменения, вносимые в последнюю версию JSplitter (кроме движка), будут добавляться и туда. Единственная разница между веткой 4.x и 3.x в движке JavaScript: В 3.x будет всегда один и тот же движок 102.15.1esr, а в 4.x - самый свежий ESR.

СКАЧАТЬ
АНГЛИЙСКАЯ ВЕРСИЯ
РУССКАЯ ВЕРСИЯ

Версия 3.9.7 (для пользователей Windows 7)
АНГЛИЙСКАЯ ВЕРСИЯ
РУССКАЯ ВЕРСИЯ

Краткое руководство
Для добавления панелей в сплиттер можно воспользоваться следующими способами:

1. С помощью контекстного меню панели плагина:

2.PNG


2. С помощью стандартного размещателя Columns UI:

4.PNG


3. С помощью списка панелей, вызываемого из контекстного меню плагина:

10.png


либо окна редактирования скрипта (см. скриншот). Список панелей можно также использовать для добавления, удаления, переупорядочивания панелей, а также изменения их положения и размеров вручную (двойной щелчок по соответствующему полю):

Снимок.PNG


4. В стандартном режиме редактирования разметки (Default UI / Columns UI)

9.png


Все добавляемые панели можно вручную перемещать, изменять их размер, сворачивать, разворачивать, закрывать. У каждого окна в заголовке имеется меню для настройки некоторых опций:

3.PNG


ВНИМАНИЕ! Порядок размещения панелей в сплиттере зависит от глубины их визуального расположения. Самое верхнее окно будет последним в списке. Если вы активируете мышкой какую-либо панель, она переместится в конец списка. Учитывайте это при использовании функции GetPanelByIndex (см. ниже). Чтобы случайных перемещений по списку не происходило, вы можете заблокировать панель (см. ниже)

Show caption - включает/отключает отображение рамки (бордюра) окна панели
Locked - заблокировать панель. С установленной галочкой окно не реагирует на попытки переместить/изменить/закрыть окно.
Show coords - отобразить координаты. В заголовке окна будут отображены координаты окна, которые будут обновляться по мере перемещения/изменения размера окна.
Support pseudo transparency - некоторым окнам необходима поддержка "прозрачности". С включенной опцией плагин будет заменять фон окна панели на содержимое корневого окна плагина. Т.е. например все, что нарисовано в скрипте с помощью on_paint(gr) будет скопировано в окно.

В режиме отображения координат можно вводить необходимые координаты вручную кликнув по нужной координате или изменить название панели:

7.PNG


Настройки внешнего вида окон панелей расположены здесь:

8.png


Show tools menu for panels' caption - включает/отключает меню для заголовка окон панелей.
Move panels with middle button - позволяет перемещать панели при помощи средней кнопки мыши. Полезно когда бордюр окна скрыт (меню Show caption).
Align panels to edges of each other when dragging - выравнивать панели по краям друг друга при перетаскивании окошек. Полезно при построении интерфейса сборки, где панели должны быть расположены плотно друг к другу.
Show scrollbars for out-of-view panels - экспериментальная функция показа полос прокрутки, если панели выходят из зоны видимости. Прокручиваются только панели, содержимое отрисованного окна не меняется и не скроллится.
Hide panels on close - скрывать окна вместо их закрытия. Полезно для временного скрытия панели с помощью кнопки закрытия окна. Вернуть обратно окна можно в размещателе Columns UI сняв галочку Hidden с панели (или из "списка панелей" см. выше):

6.PNG



Программный интерфейс
Базовое API всегда зависит от плагина, на котором основана текущая версия JSplitter. Документация к плагину прилагается. Плюс к этому доступны следующие дополнения для объекта window:

window.GetPanel(caption) - получить объект для доступа к панели по тексту заголовка. Будет возвращена первая панель, совпавшая по тексту с аргументом. Текст панели указывается в заголовке. По умолчанию он имеет значение имени плагина панели, но его можно изменить как напрямую в заголовке окна (Show coords -> Click in caption text), так и в размещателе Columns UI (Use custom title)
window.GetPanelByIndex(index) - получить объект для доступа к панели по индексу. Вообще порядок изначально тот, в котором добавляются панели, но так же порядок можно увидеть в размещателе Columns UI, там же его и изменить.
window.CreateButton(x, y, images, hover_images) - создать кнопку в сплиттере. Кнопка будет создана в корне окна и будет размещена по координатам (x, y). Также функции передаются изображения для задания внешнего вида кнопки. Собственно от количества изображений images, переданных функции, будет зависеть количество состояний, которые может принимать кнопка. hover_images - изображения кнопки, отображающиеся при наведении курсора мыши. Функция достаточно гибкая для создания различного вида кнопок, например:
var path = fb.FoobarPath + "themes\\lur\\black\\bio.png";
var hpath = fb.FoobarPath + "themes\\lur\\black\\bio_on.png";
var a = window.CreateButton(0, 0, path, hpath); - создает обычную кнопку с картинкой bio.png, которая меняется на bio_on.png при наведении курсора мыши
var b = window.CreateButton(0, 0, [path, hpath], null); - создает чекбокс-кнопку. Обычное состояние - bio.png, нажатое (галочка установлена) - bio_on.png. Обратите внимание, что изображения для наведения курсора отсутствуют. Обычно чекбоксам они и не нужны, но можно их установить при желании.
var c = window.CreateButton(0, 0, [path1, path2, path3], [path1_on, path2_on, path3_on]); - можно создать кнопку с тремя (и более) состояниями. Они будут циклически переключаться при нажатии. Текущее состояние кнопки можно будет получить с помощью свойства кнопки State (см. ниже).
Также можно создать группу радио-кнопок (взаимоисключающих) с помощью следующей функции:
window.RadioButtons(buttons) - создает группу радио-кнопок. Принимает в качестве аргумента массив кнопок. Каждая кнопка должна иметь не менее двух состояний, иначе функция свалится. Пример:
var a = window.CreateButton(0, 0, [path, hpath], null);
var b = window.CreateButton(30, 0, [path, hpath], null);
window.RadioButtons([a, b]);
Теперь при нажатии на одну кнопку (состояние 1), другая будет "отключаться" (переходить в состояние 0) и наоборот.
window.GetButton(id) - получить кнопку по значению ее идентификатора (Button.ID)
window.RemoveButton(button) - удаляет кнопку
window.HandOnButtons - переключает курсор мыши для всех кнопок либо на руку, либо на стрелку. Данное свойство также действует на все создаваемые впоследствии кнопки. У каждой кнопки это свойство можно менять индивидуально (см. ниже).

Введены вспомогательные методы для управления главным окном плеера.
window.FoobarWindowX - возвращает и устанавливает положение главного окна foobar2000 по оси X.
window.FoobarWindowY - возвращает и устанавливает положение главного окна foobar2000 по оси Y.
window.FoobarWindowWidth - возвращает и устанавливает ширину главного окна foobar2000.
window.FoobarWindowHeight - возвращает и устанавливает высоту главного окна foobar2000.

Так как JSplitter не получает никакой информации о передвижении мыши над панелями самих плагинов, но иногда это требуется, то введено API для получения данных событий. Перед использованием данного API его необходимо явно разрешить в настройках JSplitter (опция "Track mouse over panels (for on_panel_mouse_*)"/"Отслеживать мышь над панелями (для on_panel_mouse_*)").
window.TrackMouseEnterLeaveOnPanels = true; - включает отслеживание входа/выхода курсора мыши из области панелей. По умолчанию false. Для обработки событий используются следующие функции:
on_panel_mouse_enter(name) - событие входа курсора в область панели, name - имя панели
on_panel_mouse_leave(name) - событие выхода курсора из области панели, name - имя панели
window.TrackMouseMoveOnPanels = true; - включает отслеживание позиции курсора мыши в пределах области панели. По умолчанию false. Для обработки события используется следующая функция:
on_panel_mouse_move(name, x, y, mask) - событие перемещения курсора в пределах области панели, name - имя панели, x,y - координаты точки на панели

Объекты, получаемые при помощи функций, указанных выше, имеют следующие свойства и методы:

ПАНЕЛИ (GetPanel, GetPanelByIndex)
Свойства:
(readonly) String Name;
(read, write) String Text;
(read, write) boolean Hidden;
(read, write) boolean Locked;
(read, write) boolean ShowCaption;
(read, write) boolean SupportPseudoTransparency;
(read, write) int X;
(read, write) int Y;
(read, write) int Width;
(read, write) int Height;
(read, write) boolean TopMost;
(read, write) boolean EraseBackground;
Методы:
void Show(show = true);
void Move(x, y, width, height, repaintParent = false);

КНОПКИ (CreateButton, GetButton)
Свойства:
(readonly) ushort ID;
(read, write) int X;
(read, write) int Y;
(read, write) int Width;
(read, write) int Height;
(read, write) boolean Hidden;
(read, write) boolean HandOnHover;
(read, write) Function Click;
(read, write) uint State;
Методы:
void Show(show = true);
void Move(x, y);
void Resize(width, height);

Назначение свойств и методов объектов довольно прозрачно. При назначении ширины или высоты кнопки в ноль, ширина и высота автоматически высчитываются (как и просто при создании кнопки) из максимальной ширины и высоты изображений. Отдельного упоминания заслуживает обработка нажатий кнопок. Она осуществляется 2-мя
путями:

1. При помощи задания свойства Click объекта кнопки:
var a = window.CreateButton(0, 0, [path, hpath], null);
a.Click = function() { do_something(); }

2. При помощи специального callback'a, который вызывается при нажатии ВСЕХ кнопок, созданных с помощью window.CreateButton:
function on_button_click(id) - принимает идентификатор кнопки, который можно получить через свойство кнопки ID.
switch(id) {
case a.ID:
do_something();
break;
}


ПРИМЕЧАНИЕ: В отличие от панелей, существующих вне зависимости от скрипта, кнопки создаются только программно с помощью скрипта и всегда уничтожаются при выгрузке скрипта.


ДОКУМЕНТАЦИЯ
https://dima-lur.github.io/jsplitter/

Пример конфигурации
Распаковать в папку с чистым портативным фубаром.
СКАЧАТЬ

Пример от zeremy

История версий
Версия 4.3.4 [07.10.2026]
  • [ИСПРАВЛЕНИЕ] Исправлена ошибка инвалидации шрифта GDI+, загруженного с помощью utils.LoadFont. Обращение к свойству GdiFont.Name могло инвалидировать внутренний объект шрифта GDI+ и приводить к падению foobar2000 при последующих операциях рисования GDI+, например GdiGraphics.DrawString.
  • [ИСПРАВЛЕНИЕ] Исправлено падение, которое могло происходить при выходе из foobar2000 во время финализации объектов JavaScript. Реэнтерабельная обработка оконных сообщений при освобождении COM-объектов могла попытаться выполнить ожидающие задания JavaScript после того, как контекст JavaScript уже был уничтожен. Жизненный цикл завершения работы и очистка ресурсов также усилены для защиты от реэнтерабельной финализации.
  • [ОБНОВЛЕНИЕ] Расширен метод MenuObject.SetDefault: теперь в качестве параметра можно передавать не только ID пункта, но и другой объект MenuObject, что позволяет назначить само подменю пунктом по умолчанию.

Версия 4.3.3 [06.10.2026]
  • [ИСПРАВЛЕНИЕ] Исправлено некорректное преобразование component-specific locations (например, 3dydfy://) в пути файловой системы в fb.AddLocationsAsync и plman.AddLocations. Относительные пути к файлам по-прежнему разрешаются относительно текущего скрипта, include-файла или файла Worker.
  • [ИСПРАВЛЕНИЕ] Удалён завершающий разделитель пути из %jsplitter_fb2k% и %jsplitter_fb2k_profile%, чтобы они соответствовали ожидаемому синтаксису путей Title Formatting и не создавали двойные разделители при составлении путей.

Версия 4.3.2 [05.10.2026]
  • [ИСПРАВЛЕНИЕ] Исправлена визуальная «белая вспышка», которая всегда появлялась при запуске foobar2000 независимо от текущей темы. Теперь JSplitter самостоятельно отрисовывает начальный фон панели в соответствии с текущей темой интерфейса до начала выполнения скрипта.
  • [ОБНОВЛЕНИЕ] Убраны ненужные hit testing и обработка курсора в режиме FbWindow.FrameStyle NoBorder в случаях, когда такое поведение неприменимо (например, когда MinWidth == MaxWidth).
  • [НОВОЕ] Добавлены методы FbTitleFormat.EvalActivePlaylistItem и FbTitleFormat.EvalPlaylistItem для вычисления выражений Title Formatting в контексте плейлиста, включая специфичные для плейлиста поля, такие как %list_index% и %list_total%.
  • [НОВОЕ] Добавлен метод MenuObject.SetDefault для назначения пункта меню по умолчанию, который отображается жирным шрифтом. Пункт по умолчанию можно переназначить повторным вызовом метода с другим ID.

Версия 4.3.1 [03.10.2026]
  • [НОВОЕ] Добавлены две глобальные переменные Title Formatting: %jsplitter_fb2k% и %jsplitter_fb2k_profile%, предоставляющие пути к каталогам установки и профиля foobar2000. Эти же значения доступны в качестве переменных окружения процесса. Добавлен отдельный раздел Title Formatting в документации с описанием всех переменных JSplitter.
  • [ОБНОВЛЕНИЕ] Метод FbWindow.SetPseudoCaption расширен необязательным параметром maximize_on_dblclk, позволяющим разворачивать и восстанавливать главное окно двойным щелчком по области псевдозаголовка.
  • [ОБНОВЛЕНИЕ] Унифицировано разрешение относительных файловых путей во всех поддерживаемых API, принимающих пути к файлам, включая скрипты панелей, подключаемые файлы и Workers. Относительные пути разрешаются относительно расположения вызывающего скрипта с последующим поиском в предусмотренных каталогах.
  • [НОВОЕ] Добавлено свойство window.ScriptInfo.Path, возвращающее полный файловый путь к основному скрипту панели в системном формате или пустую строку для скриптов, загружаемых из памяти.
  • [ИСПРАВЛЕНИЕ] Исправлено возможное падение в fb.ShowPictureViewer при невозможности открыть файл изображения, если его путь содержит фигурные скобки.

Версия 4.3.0 [02.10.2026]
  • [ОБНОВЛЕНИЕ] Движок JavaScript обновлён до SpiderMonkey 153.4.0esr.
  • [НОВОЕ] Добавлена поддержка ES-модулей. Файлы .mjs, выбранные в качестве файловых скриптов панели, теперь загружаются как ES-модули с поддержкой относительных статических импортов, вложенных и циклических зависимостей, именованных экспортов и экспорта по умолчанию, кеширования модулей, import.meta.url, путей с Unicode и корректной передачи ошибок при загрузке, разборе и выполнении модулей.
  • [ОБНОВЛЕНИЕ] foobar2000 SDK обновлён до версии от 2026-10-01.
  • [НОВОЕ] API FbWindow расширен системными командами для управления главным окном foobar2000: Minimize, Maximize, Restore и Close, а также свойствами IsMinimized и IsMaximized для проверки состояния окна.
  • [НОВОЕ] Добавлено свойство window.IsToolbar, позволяющее определить, размещена ли панель JSplitter на панели инструментов Columns UI.

Версия 4.2.2 [28.09.2026]
  • [НОВОЕ] Добавлены потоковые API файлового ввода-вывода для обработки больших файлов без загрузки всего их содержимого в память JavaScript. utils.OpenTextReader и utils.OpenTextWriter обеспечивают построчное чтение и запись текста с выбором кодировки, а utils.OpenBinaryReader и utils.OpenBinaryWriter позволяют читать и записывать двоичные данные через повторно используемые буферы Uint8Array. API доступны как в панели, так и в Worker.
  • [ОБНОВЛЕНИЕ] Расширена поддержка кодировок в utils.ReadTextFile и utils.WriteTextFile. Чтение текста теперь единообразно поддерживает UTF-8, UTF-16LE/BE, UTF-32LE/BE и поддерживаемые кодовые страницы Windows, включая автоматическое определение кодировки при соответствующем запросе. WriteTextFile теперь также принимает кодовую страницу для выходного файла вместо ограничения только UTF-8 и может опционально записывать BOM для UTF-8, UTF-16 и UTF-32. Для совместимости существующие значения по умолчанию для UTF-8 не изменены.
  • [НОВОЕ] Добавлен Worker.RunAsync для удобного однократного выполнения фоновой работы без ручного создания и управления постоянным Worker. Каждый вызов создаёт временный полноценный Worker realm/поток, структурно клонирует переданные аргументы в него, выполняет пользовательский синхронный или асинхронный JavaScript callback, структурно клонирует результат обратно в панель и после этого автоматически завершает Worker. Метод предназначен для достаточно крупных изолированных задач, например обработки больших файлов, где отдельный протокол обмена сообщениями с Worker лишь добавлял бы лишний шаблонный код.
  • [НОВОЕ] Добавлен нативный SQLite API, доступный как в панели, так и в Worker, если процесс foobar2000 предоставляет совместимую библиотеку SQLite. utils.OpenDatabase открывает файловые базы данных или базы в памяти и возвращает объект SQLiteDatabase с прямым выполнением SQL, параметризованными запросами, транзакциями и повторно используемыми подготовленными выражениями через SQLiteStatement. Значения JavaScript могут безопасно передаваться как SQL-параметры, строки результата возвращаются как обычные JavaScript-объекты, а значения SQLite BLOB представлены как Uint8Array. Относительные пути к базе используют разрешение путей относительно скрипта JSplitter; также поддерживаются базы :memory:.
  • [НОВОЕ] Добавлен utils.LoadFont для загрузки пользовательских TrueType/OpenType-шрифтов непосредственно из пакетов скриптов без их установки в Windows. Загруженные шрифты являются приватными для процесса foobar2000, становятся доступны API шрифтов GDI и Direct2D и используются совместно панелями и Worker. Относительные пути разрешаются относительно текущего скрипта JSplitter, благодаря чему шрифты можно распространять вместе с основным скриптом, подключаемыми файлами или исходниками Worker. Повторная загрузка одного и того же файла безопасна, а загруженные шрифты остаются доступны на протяжении всего времени работы процесса foobar2000.
  • [НОВОЕ] Добавлен API fb.Window для управления главным окном foobar2000 непосредственно из скриптов панели. API предоставляет текущую позицию и внешний размер окна, позволяет перемещать и изменять его размер, переключаться между стандартной рамкой, режимом без заголовка и режимом без рамки, входить и выходить из полноэкранного режима, а также задавать ограничения минимального и максимального размера. В Default User Interface также можно скрывать и восстанавливать главное меню и строку состояния. Настройки применяются непосредственно к главному окну foobar2000 и могут динамически изменяться во время работы. Начиная с этого выпуска window.FoobarWindowX, window.FoobarWindowY, window.FoobarWindowWidth, window.FoobarWindowHeight и window.MoveFoobarWindow устарели и будут удалены в будущих версиях. В новом коде следует использовать свойства геометрии fb.Window и Move.
  • [ОБНОВЛЕНИЕ] utils.GetWaveformAsync расширен опциональным callback on_progress. Готовые диапазоны огибающей waveform теперь могут передаваться ещё во время декодирования, позволяя интерфейсу waveform появляться постепенно, не дожидаясь завершения декодирования всего трека. Callback получает каждый новый диапазон Float32Array вместе с его смещением в выходном массиве и может вернуть false, чтобы отменить устаревший запрос декодирования. Возвращаемый Promise по-прежнему разрешается полным waveform после нормального завершения декодирования. Добавлен пример.
  • [НОВОЕ] В расширенные настройки JSplitter добавлен параметр «Формат заголовка статистики воспроизведения». Он задаёт выражение Title Formatting, используемое для идентификации треков во внутреннем индексе статистики воспроизведения JSplitter, и позволяет изменить схему сопоставления для библиотек, где стандартного идентификатора $lower(%artist% - %title%) недостаточно. Изменение настройки требует перезапуска foobar2000.
  • [ОБНОВЛЕНИЕ] Расширен fb.ShowPictureViewer. Помимо непосредственного открытия изображения по пути к файлу, теперь он может принимать FbMetadbHandle и опциональный тип обложки альбома. В этом варианте foobar2000 самостоятельно находит и открывает требуемое изображение, включая как встроенные, так и внешние обложки.
  • [НОВОЕ] Добавлены API выбора звуковых потоков для мультимедийных файлов с несколькими потоками. fb.GetAudioStreams перечисляет все звуковые потоки, предоставляемые активным входным декодером, и возвращает для каждого полные данные FbFileInfo вместе с индексом потока, состоянием потока по умолчанию и текущим пользовательским выбором. fb.SetAudioStream сохраняет выбранный поток для трека и, если применяется к воспроизводимому в данный момент элементу, перезапускает воспроизведение так, чтобы новый поток применился немедленно с продолжением примерно с текущей позиции. Выбор потоков использует штатный input stream selector foobar2000, а SetAudioStream требует foobar2000 2.0 или новее.
  • [ИСПРАВЛЕНИЕ] Исправлена обработка сохранённых компоновок JSplitter, содержащих ссылки на UI Elements из компонентов, которые больше не установлены или временно недоступны. Отсутствующие дочерние элементы теперь обрабатываются безопасно и представлены заглушкой UI Element not found вместо неправильного восстановления или инициализации панели.
  • [ИСПРАВЛЕНИЕ] Исправлено периодическое зависание при перезапуске foobar2000 после обновления или удаления используемого в данный момент пакета скриптов. Перезапуск теперь запрашивается только после полного закрытия Package Manager и диалога настройки панели, что предотвращает зависание завершения работы во вложенном модальном цикле сообщений.
  • [ОБНОВЛЕНИЕ] Движок редактора исходного кода обновлён до Scintilla 5.6.7.

Версия 1.0 [20.03.2018]
LUR M
Автор темы, Модератор
Откуда: Минск
Репутация: 447
С нами: 13 лет 10 месяцев


Сообщение #401 LUR » 03.10.2024, 19:16

dreamawake:var SP = window.GetPanel('xxxx');
I can't see your panel naming cause I can't import test themes.
Especially if you just put your test them in a profile with a name theme.fth, they are just empty without any panels

Снимок экрана 2024-10-03 191616.png


What is xxxx ? If no panel with this name you'll get this error.

Добавлено спустя 6 минут 56 секунд:
Снимок экрана 2024-10-03 192309.png
LUR M
Автор темы, Модератор
Откуда: Минск
Репутация: 447
С нами: 13 лет 10 месяцев

Сообщение #402 dreamawake » 03.10.2024, 19:36

I can't see your panel naming cause I can't import test themes.
What is xxxx ? If no panel with this name you'll get this error.

Layouts already in your Quick Setup lists, see highlighted below.

2024-10-03 191616.png


Both two layouts have two splitter panels -- one parent one child.
xxx stand for the child panel name in the layout, one layout is "JSPlitter", another layout is "JSPlitter2". The names are in accordance with the panels.

2024-10-04_002929.jpg


2024-10-04_003029.jpg
dreamawake
Репутация: 3
С нами: 3 года 5 месяцев

Сообщение #403 LUR » 03.10.2024, 19:41

When changing the main layout, the old script tries to execute one else, and only then the new JSplitter settings from another theme are loaded, including the script. If you do Reload, everything is fine. I have to think if I can fix this (although it's not a critical bug). In Columns UI this doesn't happen when importing a theme.

Добавлено спустя 7 часов 57 минут:
Версия 3.6.1.9 [04.10.2024]

● При импорте темы DUI, включающей в состав себя панель JSplitter, дополнительно выполнялся скрипт из текущей темы, что приводило к сообщениям об ошике при обращении скрипта к несуществующим более панелям
● Обновлен движок редактора кода до Scintilla 5.5.2
LUR M
Автор темы, Модератор
Откуда: Минск
Репутация: 447
С нами: 13 лет 10 месяцев

Сообщение #404 dreamawake » 04.10.2024, 18:33

Hi, LUR, thanks for your update. Glad that crash will not occur upon switch, but the problem is settled 50% only, because the elements of the origin layout and the new loaded layout are not swapped properly, they will "mixed" together and causing crash for further operation.
I attached two new simple layouts (A & B) with different appearance for your testing, please look at it and you will catch the "mixing".

test themes A&B.zip
(1.72 КБ) Скачиваний: 220


Thank u again.
dreamawake
Репутация: 3
С нами: 3 года 5 месяцев

Сообщение #405 LUR » 04.10.2024, 18:46

dreamawake, I can't import your themes. empty layout without a single panel.

Снимок экрана 2024-10-04 184616.png
LUR M
Автор темы, Модератор
Откуда: Минск
Репутация: 447
С нами: 13 лет 10 месяцев

Сообщение #406 dreamawake » 04.10.2024, 18:53

These two layouts are as below. I have confirmed again. Please see if you need to be restart foobar2000 upon switch (this is the exact problem).

A layout:
A.jpg


B layout:
B.jpg


mixed upon switch:
mix.jpg
dreamawake
Репутация: 3
С нами: 3 года 5 месяцев

Сообщение #407 LUR » 04.10.2024, 23:56

dreamawake, yes, because the root panel script was not executed as previously implemented =) After reload it's ok. Script of new layout was loaded but not executed. It turns out that DUI does not create a new window if it is already created, so the root window is not updated. I figured out how to fix this in next update.

Добавлено спустя 1 час 4 минуты:
Версия 3.6.1.10 [05.10.2024]

● При переключении тем DUI, включающих в состав себя панель JSplitter, не выполнялось обновление корневого окна.
LUR M
Автор темы, Модератор
Откуда: Минск
Репутация: 447
С нами: 13 лет 10 месяцев

Сообщение #408 dreamawake » 05.10.2024, 05:54

It works well now. Thank u.
dreamawake
Репутация: 3
С нами: 3 года 5 месяцев

  • 1

Сообщение #409 marc2003 » 10.10.2024, 16:27

About this crash on exit... it's because you're calling Scintilla_ReleaseResources from DllMain>DLL_PROCESS_DETACH.

This was fine in original JSP/SMP using the default technology but crashes since you now seem to be using Technology::DirectWrite.

So call Scintilla_ReleaseResources from initquit::on_quit or use this macro...

FB2K_RUN_ON_QUIT(Scintilla_ReleaseResources);
marc2003
Репутация: 6
С нами: 8 лет 6 месяцев

  • 1

Сообщение #410 LUR » 11.10.2024, 17:53

marc2003:you now seem to be using Technology::DirectWrite
Yes, you're right.

marc2003:So call Scintilla_ReleaseResources from initquit::on_quit or use this macro...
Thank you, will do that.
LUR M
Автор темы, Модератор
Откуда: Минск
Репутация: 447
С нами: 13 лет 10 месяцев

Сообщение #411 dreamawake » 26.10.2024, 03:50

Hi, Lua, will there is a fix update soon? Could you please also fix the bug regarding to panel index?
After the panel switched, the active panel will be automatically moved to the last one, it causes the panel index is not constant that function GetPanelByIndex(index) will be useless.

if panel D is active:
# name hide
1 A yes
2 B yes
3 C yes
4 D No

if switch to C panel (C is activated):
# name hide
1 A yes
2 B yes
3 D yes
4 C No
dreamawake
Репутация: 3
С нами: 3 года 5 месяцев

Сообщение #412 LUR » 26.10.2024, 07:28

dreamawake, it's not a bug it's a feature) someone got me hooked on this idea in this thread and I bought into it - it was a long time ago and I don't remember why I decided to do this
active panels change their order. but in fact I always address them by name, it's more convenient.

disclaimer in thread header:

Добавлено спустя 4 минуты 44 секунды:
Снимок экрана 2024-10-26 073210.png


translation:
ATTENTION! The order of the panels in the splitter depends on the depth of their visual arrangement. The topmost window will be the last in the list. If you activate any panel with the mouse, it will move to the end of the list. Keep this in mind when using the GetPanelByIndex function (see below). To prevent accidental movement through the list, you can lock the panel (see below).
LUR M
Автор темы, Модератор
Откуда: Минск
Репутация: 447
С нами: 13 лет 10 месяцев

Сообщение #413 dreamawake » 26.10.2024, 18:42

OK. Then I will keep using GetPanelByName for panel handling.
dreamawake
Репутация: 3
С нами: 3 года 5 месяцев

Сообщение #414 regor » 28.10.2024, 21:32

English (bugfix report)
Спойлер
Hi,
first thank you so much for offering a SMPx64 version. Much needed! I have tried before building the component without luck, would be great to have a working repo for SMP

There seems to be some problems with current version:
1. Packages are not loaded properly
https://hydrogenaud.io/index.php/topic,126743.msg1053097.html#msg1053097
https://hydrogenaud.io/index.php/topic,126743.msg1052989.html#msg1052989
https://hydrogenaud.io/index.php/topic,126743.msg1052207.html#msg1052207
Final test:
https://hydrogenaud.io/index.php/topic,126743.msg1053124.html#msg1053124
Dev tip:
https://hydrogenaud.io/index.php/topic,126743.msg1053132.html#msg1053132

2. One of the changes on the engine broke working code on previous SMP versions:
https://hydrogenaud.io/index.php/topic,126743.msg1051999.html#msg1051999
Not sure how you want to handle it, but that should polyfill it. (or just give a warn on the docs, it's a pretty obscure and useless thing)

Have to test other things, not sure if you implemented these fixes:
https://hydrogenaud.io/index.php/topic,116669.msg1026243.html#msg1026243

Finally, are you open to SMP bugfixes or improvements? Right now the only development on SMP is done by you. There are some remaining important bugs, like ActiveX objects connecting to internet crashing foobar2000 on panel reload/shutdown. Can give more details if needed. In particular 'WinHttp.WinHttpRequest.5.1' or 'Microsoft.XMLHTTP' and their variants.
https://hydrogenaud.io/index.php/topic,121047.msg1044579.html#msg1044579
https://hydrogenaud.io/index.php/topic,121047.msg1044677.html#msg1044677

Also some changes to current features (which hopefully should be easy to implement), like the limit of heap size at advanced preferences. On x64 there should not be a hard limit imposed (which would allow the plugin to work on huge libraries with complex scripts).
Изображение
And please, the limit of 60s on the slow script warning. Allowing a 0 or -1 to disable it and much higher values too. This one alone has provoked a lot of script reports when tagging huge libraries on batch using scripts and similar things.

Both preferences are hard limited to those values, and you can not increase it (or disable the second one).

Thank you so much.

Ru Google translate
Спойлер
Привет,
во-первых, большое спасибо за то, что предложили версию SMPx64. Очень нужно! Я пытался до сборки компонента, но безуспешно, было бы здорово иметь работающий репозиторий для SMP

Кажется, есть некоторые проблемы с текущей версией:
1. Пакеты не загружаются должным образом
https://hydrogenaud.io/index.php/topic,126743.msg1053097.html#msg1053097
https://hydrogenaud.io/index.php/topic,126743.msg1052989.html#msg1052989
https://hydrogenaud.io/index.php/topic,126743.msg1052207.html#msg1052207
Финальный тест:
https://hydrogenaud.io/index.php/topic,126743.msg1053124.html#msg1053124
Dev совет:
https://hydrogenaud.io/index.php/topic,126743.msg1053132.html#msg1053132

2. Одно из изменений в движке сломало рабочий код в предыдущих версиях SMP:
https://hydrogenaud.io/index.php/topic,126743.msg1051999.html#msg1051999
Не уверен, как вы хотите с этим справиться, но это должно полифиллить его. (или просто выдать предупреждение в документации, это довольно непонятная и бесполезная вещь)

Нужно протестировать другие вещи, не уверен, реализовали ли вы эти исправления:
https://hydrogenaud.io/index.php/topic,116669.msg1026243.html#msg1026243

Наконец, вы открыты для исправлений ошибок или улучшений SMP? Прямо сейчас единственная разработка SMP выполняется вами. Остались некоторые важные ошибки, например, объекты ActiveX, подключающиеся к Интернету, которые приводят к сбою foobar2000 при перезагрузке/выключении панели. При необходимости могу предоставить более подробную информацию. В частности, 'WinHttp.WinHttpRequest.5.1' или 'Microsoft.XMLHTTP' и их варианты.
https://hydrogenaud.io/index.php/topic,121047.msg1044579.html#msg1044579
https://hydrogenaud.io/index.php/topic,121047.msg1044677.html#msg1044677

Также некоторые изменения в текущих функциях (которые, как мы надеемся, будет легко реализовать), например, ограничение размера кучи в расширенных настройках. На x64 не должно быть жесткого ограничения (которое позволило бы плагину работать с огромными библиотеками со сложными скриптами).
Изображение
И, пожалуйста, ограничение в 60 секунд для предупреждения о медленном скрипте. Разрешение 0 или -1 для его отключения и гораздо более высоких значений тоже. Это одно вызвало множество отчетов о скриптах при пометке огромных библиотек в пакетном режиме с использованием скриптов и подобных вещей.

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

Большое спасибо.
regor
Репутация: 1
С нами: 1 год 11 месяцев

Сообщение #415 regor » 29.10.2024, 20:09

Also Samples must be updated, since last.fm and Allmusic ones don't work anymore due to web and API changes. See this:
https://hydrogenaud.io/index.php/topic,126743.msg1053063.html#msg1053063

I would recommend you to replace the current samples provided by the component with those I uploaded at this thread. See changelog.
https://hydrogenaud.io/index.php/topic,126743.msg1053179.html#msg1053179

Changed files:
Спойлер
[js] (entire folder)
allmusic review.js
last.fm bio.js
last.fm similar artists + user charts + recent tracks.js

Также необходимо обновить сэмплы, так как last.fm и Allmusic больше не работают из-за изменений в вебе и API. Смотрите это:
https://hydrogenaud.io/index.php/topic,126743.msg1053063.html#msg1053063

Я бы рекомендовал вам заменить текущие сэмплы, предоставляемые компонентом, на те, которые я загрузил в этой теме. Смотрите журнал изменений.
https://hydrogenaud.io/index.php/topic,126743.msg1053179.html#msg1053179
regor
Репутация: 1
С нами: 1 год 11 месяцев

Сообщение #416 LUR » 30.10.2024, 05:13

regor, I'll look later, no time, but thanks for sharing and being interested

I haven't made improvements to the component for a long time, so don't expect much from me, considering that all the scripts included in it are not my authorship, but those of JScriptPanel and SMP developers. They somehow collaborated, and on my part it was writing a splitter with API support from the player author (DUI) and CUI and made it available for coding in JS.

Since the author of JScript Panel has closed the code and does not share it, the component is based on the latest developer version of SMP, but there is no releases by the author yet, so there is nothing to update and it is shipped by me as is.

I only occasionally fix bugs in my component, not the scripts themselves.

Добавлено спустя 48 минут 17 секунд:
regor:1. Packages are not loaded properly
Hm... Biography-vversion1.4.2.mod.1.zip, can't reproduce the bug
Снимок экрана 2024-10-30 055420.png


Добавлено спустя 25 минут 49 секунд:
regor:2. One of the changes on the engine broke working code on previous SMP versions:
Not sure how you want to handle it, but that should polyfill it. (or just give a warn on the docs, it's a pretty obscure and useless thing)

For all the changes in the engine it's like the authors of SpiderMonkey (Firefox JS engine)

Добавлено спустя 5 минут 18 секунд:
regor:Finally, are you open to SMP bugfixes or improvements? Right now the only development on SMP is done by you.
No. I am not an SMP developer and never was. I developed this add-on on top, but in imrovements of SMP touched compilation of x64 JS engine and fixes for SMP building for this architecture and update Scintilla code editor engine with access to alternative settings

Добавлено спустя 16 минут 57 секунд:
regor:I would recommend you to replace the current samples provided by the component with those I uploaded at this thread. See changelog.
Ok, will do this

As marc2k3 (JSP author) rightly said, scripts included in SMP are better not to be used seriously (I didn't use them). maybe they should be excluded from JSplitter as harmful. again, it's not my task to write samples, I had absolutely no regard for their quality and just included them as samples from the authors, marc2k3 does it only and keeps them up to date in his component

Добавлено спустя 29 минут 6 секунд:
Some points from your long post I'll look separately later, and make modifications
LUR M
Автор темы, Модератор
Откуда: Минск
Репутация: 447
С нами: 13 лет 10 месяцев

Сообщение #417 SergPuh.68 » 31.10.2024, 16:58

var isShowGroups = fb.IsMainMenuCommandChecked("View/Playlist view/Show groups");
var isShowArtwork = fb.IsMainMenuCommandChecked("View/Playlist view/Show artwork");

В версии 3.6.1 метод работает а в последней нет, что то поменялось или это какая то ошибка?
SergPuh.68 M
Откуда: Украина
Репутация: 146
С нами: 7 лет 9 месяцев

Сообщение #418 regor » 31.10.2024, 19:34

I'm also having a problem with the same method:
https://github.com/phw/foo_listenbrainz2/issues/22

But not sure if it's related to that component in particular or this.

Добавлено спустя 6 минут 45 секунд:
Since the author of JScript Panel has closed the code and does not share it, the component is based on the latest developer version of SMP, but there is no releases by the author yet, so there is nothing to update and it is shipped by me as is.

I only occasionally fix bugs in my component, not the scripts themselves
Obviously all my suggestions about SMP, were meant for your script and version. Also not suggesting to change anything on the scripts, I can help with that providing updated samples though.

Hm... Biography-vversion1.4.2.mod.1.zip, can't reproduce the bug
If you check the latest links about that bug, it seems related to some kind of UTF8 bug parsing of your component when the path contains non compatible chars.
https://hydrogenaud.io/index.php/topic,126743.msg1053132.html#msg1053132
Here it's pointed that japanese chars on the path give problems (but they worked in SMP).
https://hydrogenaud.io/index.php/topic,126743.msg1053147.html#msg1053147

For all the changes in the engine it's like the authors of SpiderMonkey (Firefox JS engine)
But since SMP latest version does not use the new engine, only your component, that's why I suggest you to add the warning in your docs.

No. I am not an SMP developer and never was. I developed this add-on on top, but in imrovements of SMP touched compilation of x64 JS engine and fixes for SMP building for this architecture and update Scintilla code editor engine with access to alternative settings
I understand, that's why I asked if you are open to more bugfixes. Also some people would appreciate part of the UI-hacks features too, since they are not available at x64. I saw you added some methods to control foobar2000 window width and height for ex.

As marc2k3 (JSP author) rightly said, scripts included in SMP are better not to be used seriously (I didn't use them). maybe they should be excluded from JSplitter as harmful. again, it's not my task to write samples, I had absolutely no regard for their quality and just included them as samples from the authors, marc2k3 does it only and keeps them up to date in his component
I can help with the samples updating some of them and even provided more new samples.
regor
Репутация: 1
С нами: 1 год 11 месяцев

Сообщение #419 SergPuh.68 » 31.10.2024, 20:21

Удивительно но
var isAlwaysonTop = fb.IsMainMenuCommandChecked("View/Always on Top");
в последней версии компонента работает :think:
SergPuh.68 M
Откуда: Украина
Репутация: 146
С нами: 7 лет 9 месяцев

Сообщение #420 regor » 31.10.2024, 20:36

It seems it works with some entries but not others...
regor
Репутация: 1
С нами: 1 год 11 месяцев