Скрипты для foo_uie_wsh_panel_mod

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

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

Сообщение #2161 vladj » 12.02.2018, 22:35

Название в скрипте в строке 246...
["$info(mp3_stereo_mode)", "Режим стерео MP3"],
то, что в скобках выводится при показе на англ яз, то что в кавычках при показе на русском. Подкорректируй например (mp3 mode), "Режим MP3".
Некоторые не нужные можно закомментировать двойным слэшем что-бы не показывались. После каждого изменения применяем (кнопка Apply) внизу.
Желательно перед играми со скриптом забэкапить его, т.е. внизу Экспорт и сохраняешь в удобном месте. Напортачишь, восстановишся сделав Ипорт.
У меня вообще ужато до нужного мне минимума все и полная панель инфы...
ScreenShot04.jpg
ScreenShot04.jpg (120.85 КБ) Просмотров: 1947
vladj M
Аватара
Откуда: Пермский край
Репутация: 427
С нами: 14 лет 2 месяца

Сообщение #2162 stalk:er » 13.02.2018, 10:09

vladj, нет так нельзя корректировать - строка сразу пропадает. Это правится где-то в другом месте...
stalk:er M
Аватара
Откуда: Санкт-Петербург
Репутация: 8
С нами: 17 лет

Сообщение #2163 vladj » 13.02.2018, 13:27

Так уж принципиально иметь названия на английском ? Вот заделал на русском...
ScreenShot10.jpg
ScreenShot10.jpg (53.22 КБ) Просмотров: 1905
vladj M
Аватара
Откуда: Пермский край
Репутация: 427
С нами: 14 лет 2 месяца

Сообщение #2164 stalk:er » 13.02.2018, 16:44

vladj, аха ))
stalk:er M
Аватара
Откуда: Санкт-Петербург
Репутация: 8
С нами: 17 лет

Сообщение #2165 kgena_ua » 13.02.2018, 17:28

stalk:er:mp3 mode подвинуть текст влево
Для чего.
stalk:er:подскажите как реализовать с помощью скипта
т.е. так
Безымянный.png
Безымянный.png (3.13 КБ) Просмотров: 1872
kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 10 лет 11 месяцев

Сообщение #2166 vladj » 13.02.2018, 19:10

А где выставляется расстояние между item name и item value и как убрать этот "автозазор" между ними ?
При любом изменении какого-то значения и применения они приближаются почти так, как нужно, но потом value "отскакивает" правей.
vladj M
Аватара
Откуда: Пермский край
Репутация: 427
С нами: 14 лет 2 месяца

Сообщение #2167 kgena_ua » 13.02.2018, 19:16

["$info(mp3_stereo_mode)", "Режим стерео MP3"],

"$info(mp3_stereo_mode)" - изменять нельзя, 'этот (эти) элементы массива необходимы значений.

для примера:

field = "$info(mp3_stereo_mode)";
fb.TitleFormat("[" + field + "]").EvalWithMetadb(metadb);

А на экране отображается этот-же элемент, только "очищенный от ненужных символов."
Т.е. было так $info(mp3_stereo_mode) - столо так mp3 stereo mode
kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 10 лет 11 месяцев

Сообщение #2168 vladj » 13.02.2018, 19:46

Да он с этим разобрался перейдя на русский, а там в item name можно хоть что написать. Наверное вставляет скрипт в узкую панель и длина (количество букв) в item name для него критично.
vladj M
Аватара
Откуда: Пермский край
Репутация: 427
С нами: 14 лет 2 месяца

Сообщение #2169 kgena_ua » 13.02.2018, 19:52

vladj:А где выставляется расстояние между item name и item value и как убрать этот "автозазор" между ними ?
vladj, привет.
Расстояние между item name и item value вычисляется автоматически.
Код: Выделить всё
        if (value && value != 0 && !group){
            tmp = lang == 0 ? clear_item_name(tfname[j][0]) : tfname[j][1];
            tmp_t_x2 = calc_text_data("w", tmp, font_item_name);
            t_x2 = tmp_t_x2 > t_x2 ? tmp_t_x2 : t_x2;
        }


Т.е. координата t_x2 для item value равна максимальному значению ширины item name + 10.

vladj:При любом изменении какого-то значения и применения они приближаются почти так, как нужно, но потом value "отскакивает" правей.

Если появляется item value, у которого ширина текста item name больше чем была до этого, происходит сдвиг вправо. Чаще это наблюдается, когда подтягиваются данные с LastFM (немного с запозданием), там длинные строки для item name.

В любом случае можно отключить автоматический расчет координаты для item valu.
Наведя курсор мыши на item value при нажатой клавише Shift, можно, нажав лев.кл.мыши, сдвинуть весь текст (колонку) влево или вправо.

Для включения "авторасчета" - поставить галочку в меню.

Безымянный.png
Безымянный.png (1.66 КБ) Просмотров: 1837
kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 10 лет 11 месяцев

Сообщение #2170 stalk:er » 13.02.2018, 20:58

kgena_ua:т.е. так
kgena_ua, вечер добрый!
Да!

Добавлено спустя 1 минуту 56 секунд:
vladj:Да он с этим разобрался перейдя на русский, а там в item name можно хоть что написать. Наверное вставляет скрипт в узкую панель и длина (количество букв) в item name для него критично.
На русский не переходил ))

Добавлено спустя 4 минуты 37 секунд:
kgena_ua:Если появляется item value, у которого ширина текста item name больше чем была до этого, происходит сдвиг вправо. Чаще это наблюдается, когда подтягиваются данные с LastFM (немного с запозданием), там длинные строки для item name.

В любом случае можно отключить автоматический расчет координаты для item valu.
Наведя курсор мыши на item value при нажатой клавише Shift, можно, нажав лев.кл.мыши, сдвинуть весь текст (колонку) влево или вправо.

Для включения "авторасчета" - поставить галочку в меню.

Спасибо за подсказку ))

Добавлено спустя 11 минут 27 секунд:
А можно уменьшить расстояние между текстом, например: 320 kbps

По мне так нужно уменьшить расстояние между "320" и "kbps" на один пробел... Это моно сделать, а то не нашёл где.

Добавлено спустя 12 минут 53 секунды:
kgena_ua, а как сделать строку: Качество - MP3 : 320 kbps?
stalk:er M
Аватара
Откуда: Санкт-Петербург
Репутация: 8
С нами: 17 лет

Сообщение #2171 kgena_ua » 14.02.2018, 11:06

stalk:er:По мне так нужно уменьшить расстояние между "320" и "kbps" на один пробел...
стр.523(может у меня уже другая, можно по поиску найти):
Код: Выделить всё
            value = value + (m_text ? "  " + m_text : "");
стояло два пробела
value = value + (m_text ? " изменять тут " + m_text : "");
stalk:er:а как сделать строку: Качество - MP3 : 320 kbps?
stalk:er, где ? :smile:
kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 10 лет 11 месяцев

Сообщение #2172 stalk:er » 14.02.2018, 12:06

kgena_ua:stalk:er, где ?
в WSH Panel Mod, просто у Вас каждый параметр отдельно, хотел объеденить в одну строку.
stalk:er M
Аватара
Откуда: Санкт-Петербург
Репутация: 8
С нами: 17 лет

Сообщение #2173 kgena_ua » 14.02.2018, 18:39

stalk:er:в WSH Panel Mod
Я так понимаю в Properties & properties file (ml) - нет.

Вот заказанный Вами скриптик.
Безымянный.png
Безымянный.png (3.07 КБ) Просмотров: 1719

Код: Выделить всё
// ==PREPROCESSOR==
// @feature "v1.4"
// @feature "watch-metadb"
// ==/PREPROCESSOR==

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

DT_CENTER = 0x00000001;

ColorTypeCUI = {
    text: 0,
    selection_text: 1,
    inactive_selection_text: 2,
    background: 3,
    selection_background: 4,
    inactive_selection_background: 5,
    active_item_frame: 6
};

ColorTypeDUI = {
   text: 0,
   background: 1,
   highlight: 2,
   selection: 3
};

var bgcolor, color1, colo2;

function get_color(){   
    if (window.InstanceType == 0){
        bgcolor = window.GetColorCUI(ColorTypeCUI.background);
        color1 = window.GetColorCUI(ColorTypeCUI.text);
        color2 = window.GetColorCUI(ColorTypeCUI.inactive_selection_text);
    } else if (window.InstanceType == 1) {
        bgcolor = window.GetColorDUI(ColorTypeDUI.background);
        color1 = window.GetColorDUI(ColorTypeDUI.text);
        color2 = window.GetColorDUI(ColorTypeDUI.highlight);
    }
    window.Repaint();
}

get_color();

function on_colors_changed(){
    get_color();
}

var pbt_remaining, length, bitrate, samplerate, codec, codec_profile;

var metadb;
on_item_focus_change();

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

    h_text = gr.CalcTextHeight("Text", font) * 3;
    y_text = wh / 2 - h_text / 2;

    text1 = pbt_remaining + (pbt_remaining ? " / " : "") + length;
    text2 = bitrate + " kbps : " + samplerate / 1000 + " Hz";
    text3 = codec + (codec_profile ? " (" + codec_profile + ")" : "");

    gr.GdiDrawText( text1, font, color1, 0, y_text, ww, wh, DT_CENTER );
    gr.GdiDrawText( "\n" + text2, font, color2, 0, y_text, ww, wh, DT_CENTER );
    gr.GdiDrawText( "\n\n" + text3, font, color1, 0, y_text, ww, wh, DT_CENTER );
}

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

function on_playlist_switch() {
    on_item_focus_change();
}

function on_playback_new_track() {
    on_item_focus_change();
}

function on_playback_stop() {
    on_item_focus_change();
}

function on_selection_changed(metadb) {
   on_item_focus_change();
}

function on_playback_time(time) {
    on_item_focus_change();
}

function on_item_focus_change() {
    metadb = fb.IsPlaying ? fb.GetNowPlaying() : fb.GetFocusItem();
    if (metadb) on_metadb_changed();
}

function on_metadb_changed() {
    bitrate = Eval("$info(bitrate)");
    codec_profile = Eval("$info(codec_profile)");
    codec = Eval("%codec%");
    samplerate = Eval("$info(samplerate)");
    pbt_remaining = fb.TitleFormat("[%playback_time_remaining%]").Eval();
    length = Eval("%length%");
    window.Repaint();
}

function Eval(field) {
    return fb.TitleFormat("[" + field + "]").EvalWithMetadb(metadb);
}

kgena_ua M
Аватара
Откуда: Украина, Днепр
Репутация: 504
С нами: 10 лет 11 месяцев

Сообщение #2174 stalk:er » 14.02.2018, 19:23

kgena_ua:Я так понимаю в Properties & properties file (ml) - нет.
Именно так, чтобы инфа была такого вида - MP3 (VBR) : 320 kbps, Joint Stereo
А так же частоту привести к виду - 44.1 kHz

P.S.: За скрипт отдельное спасибо
stalk:er M
Аватара
Откуда: Санкт-Петербург
Репутация: 8
С нами: 17 лет

Сообщение #2175 stalk:er » 15.02.2018, 21:25

Как сделать разный текст, как в Вашей сборке?
Безымянный.png
Безымянный.png (1.37 КБ) Просмотров: 1643
stalk:er M
Аватара
Откуда: Санкт-Петербург
Репутация: 8
С нами: 17 лет

Сообщение #2176 Marakobes » 15.02.2018, 21:29

kgena_ua, приветствую, а есть возможность реализовать HTML Viewer, т.е. просмотр подобных файлов в отдельной панели? Я часто сохраняю описание альбома в папке с аудиофайлами в формате .mht, было бы шикарно просматривать их прямо в F2K
Marakobes
Репутация: 1
С нами: 11 лет 7 месяцев

Сообщение #2177 Aliado_71 » 16.02.2018, 18:13

kgena_ua, Приветствую :hi: , стоит ли ожидать обновления ваших замечательных скриптов под новую js_panel 2.X.X
PS Кнопочки работают :smile: рейтинг - нет :cry:
Aliado_71
Аватара
Откуда: Украина
Репутация: 200
С нами: 9 лет

Сообщение #2178 stalk:er » 16.02.2018, 21:53

Aliado_71:kgena_ua, Приветствую , стоит ли ожидать обновления ваших замечательных скриптов под новую js_panel 2.X.X
PS Кнопочки работают рейтинг - нет

А что есть портированные скрипты? ))
stalk:er M
Аватара
Откуда: Санкт-Петербург
Репутация: 8
С нами: 17 лет

Сообщение #2179 AHAPXICT » 16.02.2018, 23:19

Aliado_71, там по мелочи нужно заменить, вчера занимался своим скриптом, переделывал под новую JS по примерам Марка ну и для примера брал скрипт kgena_ua для версии js 2.0.3.
Код: Выделить всё
// ==PREPROCESSOR==
// @name "Rating & File attributes (JScript Panel)"
// @author "kgena_ua"
// @version "12112017"
// @feature "v1.4"
// @feature "watch-metadb"
// ==/PREPROCESSOR==

// foo_playcount.dll required

function RGB(r,g,b) { return (0xff000000|(r<<16)|(g<<8)|(b)); }
function RGBA(r,g,b,a) { return ((a << 24) | (r << 16) | (g << 8) | (b)); }
function getRed(color) {return ((color >> 16) & 0xff);}
function getGreen(color) {return ((color >> 8) & 0xff);}
function getBlue(color) {return (color & 0xff);}

function RGBA_color(c) {
    return RGBA(getRed(c), getGreen(c), getBlue(c), b_hover_alpha);
}

var font_name = window.GetProperty(" text: font name", "Arial");
var font_size = window.GetProperty(" text: font size", 10);
var font_style = window.GetProperty(" text: font style", 0);

var font;
get_font();

function get_font(){
    font = gdi.Font(font_name, font_size, font_style);
}

var ww, wh;

var fso = new ActiveXObject("Scripting.FileSystemObject");

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

MF_ENABLED = 0x00000000;   
MF_GRAYED = 0x00000001;
MF_SEPARATOR = 0x00000800;

IDC_HAND = 32649;
IDC_ARROW = 32512;

ColorTypeCUI = {
    text: 0,
    selection_text: 1,
    inactive_selection_text: 2,
    background: 3,
    selection_background: 4,
    inactive_selection_background: 5,
    active_item_frame: 6
}

ColorTypeDUI = {
   text: 0,
   background: 1,
   highlight: 2,
   selection: 3
}

function get_color(){   
    if (window.InstanceType == 0){
        bgcolor = window.GetColourCUI(ColorTypeCUI.background);
        color1 = window.GetColourCUI(ColorTypeCUI.text);
        color2 = window.GetColourCUI(ColorTypeCUI.selection_text);
        color_error = RGB(255,100,0);
    } else if (window.InstanceType == 1) {
        bgcolor = window.GetColourDUI(ColorTypeDUI.background);
        color1 = window.GetColourDUI(ColorTypeDUI.text);
        color2 = window.GetColourDUI(ColorTypeDUI.highlight);
        color_error = RGB(255,100,0);
    }
    window.Repaint();
}

get_color();

function on_colors_changed(){
    get_color();
}

String.prototype.repeat = function(n) {
    return new Array(n + 1).join(this);
}

window.SetProperty(" - user", "");
if (window.GetProperty(" - user") != "" ) window.SetProperty(" - user", "");
window.SetProperty("-".repeat(50), "");
if (window.GetProperty("-".repeat(50)) != "" ) window.SetProperty("-".repeat(50), "");

var rating = 0, TAGrating, DBrating, nrating = 0;
var rating_mode = window.GetProperty("rating_mode", 0);
var set_rating_5 = window.GetProperty("set rating 5", false);

var x_text = window.GetProperty(" text: x", 0);
var y_text = window.GetProperty(" text: y", 0);
var text = window.GetProperty(" text", true);

var x_star = window.GetProperty(" star: x (0 - HCENTER)", 0);
var y_star = window.GetProperty(" star: y (0 - VCENTER)", 0);
var x_s, y_s;
var star_size = window.GetProperty(" star: size", 20);
var offset = window.GetProperty(" star: offset (percent of star size)", 20) / 100 * star_size;
var shadow = window.GetProperty(" shadow", true);
var fade_effect = window.GetProperty("fade effect", true);
var no_rating_transparent  = window.GetProperty(" no rating img transparent (0-255)", 120);

var file, file_attr, readwrite;

var lbtn_down = false;
var on_mouse = false;

var tooltip = window.GetProperty(" tooltip", true);
var tooltip_on = false;
var tooltip_text;
var tooltip_timer;

var selection_mode = window.GetProperty("selection mode", 0);
var t_type;
var metadb;
var count;
on_item_focus_change();

function on_paint(gr){
   !window.IsTransparent && gr.FillSolidRect(0, 0, ww, wh, bgcolor);
   
    x_s = x_star > 0 ? x_star + star_size / 2: (ww - (star_size + offset) * 4) / 2;
    y_s = y_star > 0 ? y_star + star_size / 2 : wh / 2;

    if (!lbtn_down) r_color = fb.IsPlaying ? color2 : color1;
    if (lbtn_down) r_color = readwrite ? fb.IsPlaying ? color2 : color1 : color_error;

    for (var i = 0; i < 5; i++) {   
        x_d = x_s + (i * (star_size + offset));
        !tooltip_on && star(gr, x_d, y_s, star_size, true, 0, color1, false, bgcolor, no_rating_transparent);
        !tooltip_on && star(gr, x_d, y_s, star_size, true, 0, r_color, shadow, bgcolor, star_alpha[i]);
    }

    h_t = gr.CalcTextHeight("000", font);
    w_t = gr.CalcTextWidth("000", font);
   
    y_t = y_text > 0 ? y_text : y_s - h_t * 0.5;
    x_t = x_text > 0 ? x_text : x_s - star_size / 2 - w_t;

    text && gr.DrawString( rating_mode == 0 ? "db" : "tag" , font, RGBA_color(color1), x_t, y_t, ww, wh);

    tooltip_on && draw_tooltip(gr);   

    gr.GdiDrawText( "", font, RGB(255,255,200), 20, 10, ww, wh );
}

function getNRating(posx) {
    nrating = Math.ceil(( posx + star_size / 2 - x_s ) / (star_size + offset ));
    if (nrating > 5) nrating = 5;
    if (nrating < 0) nrating = 0;
    if (nrating != 0) nrating = set_rating_5 ? 5 : nrating;
}

function getRating(){
  if ( count > 1 ) {
        TAGrating = 0;
        DBrating = 0;
        for (var i = 0; i < count; i++) {
            item = plman.GetPlaylistSelectedItems(plman.ActivePlaylist).Item(i);
            DBrating += parseInt(fb.TitleFormat("$if2(%rating%, 0)").EvalWithMetadb(item));
            TAGrating += parseInt(fb.TitleFormat("$if2($meta(rating), 0)").EvalWithMetadb(item));
        }
        rating = rating_mode == 0 ? DBrating : TAGrating;
        rating = Math.round(rating / count);
    } else {
        DBrating = fb.TitleFormat("$if2(%rating%,0)").EvalWithMetadb(metadb);
        TAGrating = fb.TitleFormat("$if2($meta(rating),0)").EvalWithMetadb(metadb);
        rating =  rating_mode == 0 ? DBrating : TAGrating;
    }
}

function setRating(){
   if ((nrating != rating) && metadb) {   
        if (rating_mode == 0) {
            if (count > 1) {
                for (var i = 0; i < count; i++) {
                    item = plman.GetPlaylistSelectedItems(plman.ActivePlaylist).Item(i);
                    fb.RunContextCommandWithMetadb("Playback Statistics/Rating/" + (nrating == 0 ? "<not set>" : nrating), item);
                }
            } else{
                fb.RunContextCommandWithMetadb("Playback Statistics/Rating/" + (nrating == 0 ? "<not set>" : nrating), metadb);
            }
            rating = nrating;
        }
       
        if (rating_mode == 1) {
            if (count > 1) {
                for (var i = 0; i < count; i++) {
                    item = plman.GetPlaylistSelectedItems(plman.ActivePlaylist).Item(i);
                    item_path = fb.Titleformat("%path%").EvalWithMetadb(item);//

                    try {     
                        file = fso.GetFile(item_path);   
                        var file_attr = parseInt(file.Attributes);     
                    } catch(e) {};   

                    var item_rw = file_attr == 32 ? true : false;

                    if (item_rw) {
                        var handle = item;
                        var handles = fb.CreateHandleList();
                        handles.Add(handle);
                        handles.UpdateFileInfoFromJSON(JSON.stringify({ "Rating" : nrating == 0 ? "" : nrating }));
                        handles.Dispose();
                        rating = nrating
                    }
                }
             } else {
                if (readwrite){
                    var handle = metadb;
                    var handles = fb.CreateHandleList();
                    handles.Add(handle);
                    handles.UpdateFileInfoFromJSON(JSON.stringify({ "Rating" : nrating == 0 ? "" : nrating }));
                    handles.Dispose();
                    rating = nrating                   
                }               
            }
        }
    }
    if (!readwrite && rating_mode == 1) {
        tooltip && info_tooltip();
    }
}

function on_mouse_lbtn_up(x,y){
    lbtn_down = false;
    setRating();
    check_star_state();
}

function on_mouse_lbtn_down(x,y) {
    lbtn_down = true;
    tooltip && clear_tooltip_timer();
    getNRating(x);
    check_star_state();
    window.Repaint();
}

function on_mouse_mbtn_up(){
    nrating = 0;
    setRating();
}

function on_mouse_move(x, y) {
    on_mouse = true;
    window.SetCursor(IDC_HAND);   
   
    if (lbtn_down){
        getNRating(x);
    }

    button_change_state();         
    check_star_state();         
    window.Repaint();
}   

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

function on_mouse_wheel(delta) {
    tooltip && clear_tooltip_timer();
    if (delta > 0) {rating_mode = 0};
    if (delta < 0) {rating_mode = 1};
    window.SetProperty("rating_mode", rating_mode);
    on_item_focus_change();
    window.Repaint();
}

function on_playlist_switch() {
    on_item_focus_change();
}

function on_playback_new_track() {
    on_item_focus_change();
}

function on_playback_stop() {
    on_item_focus_change();
}

function on_selection_changed(metadb) {
    on_item_focus_change();
}

function on_item_focus_change() {
    switch (selection_mode) {
    case 0:
        metadb = fb.IsPlaying ? fb.GetNowPlaying() : fb.GetFocusItem();   
        break;   
    case 1:   
        metadb = fb.GetFocusItem();
        break;   
    }   
    if (metadb) on_metadb_changed();   
}


function on_metadb_changed() {
    count = plman.GetPlaylistSelectedItems(plman.ActivePlaylist).Count;
    if (metadb) {
        rating_mode = window.GetProperty("rating_mode") == 0 ? 0 : 1;
        getRating();
        check_star_state();
        get_file_attr();
    }
    window.Repaint();
}

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

function on_mouse_rbtn_up (x, y){   
    var _menu = window.CreatePopupMenu();
   
    _menu.AppendMenuItem(MF_ENABLED, 10, "Prefer now playing");   
    _menu.AppendMenuItem(MF_ENABLED, 11, "Follow selected track");   
    _menu.CheckMenuRadioItem(10, 11 , selection_mode + 10);   
    _menu.CheckMenuItem(selection_mode + 10, 1);
   
    _menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
    _menu.AppendMenuItem(MF_ENABLED, 20, "Store Ratings in the database");
    _menu.AppendMenuItem(MF_ENABLED, 21, "Store Ratings in the file tags");
    _menu.CheckMenuRadioItem(20, 21, rating_mode + 20);     
   _menu.CheckMenuItem(rating_mode + 20, 1);   
   
    _menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
    _menu.AppendMenuItem(MF_ENABLED, 30, "Set Rating 5");
    _menu.CheckMenuItem(30, set_rating_5);   

    switch (file_attr) {
    case 32:   
        txt = "to read - only";
        break;     
    case 33:   
        txt = "to read - write";
        break;
    default:
        txt = "";
    }

    MF_STRING = txt ? MF_ENABLED : MF_GRAYED;
    _menu.AppendMenuItem(MF_SEPARATOR, 0, 0);   
    _menu.AppendMenuItem(MF_STRING, 40, "Change file attributes " + txt);
   
    _menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
    _menu.AppendMenuItem(MF_ENABLED, 50, "Fade effect");
    _menu.CheckMenuItem(50, fade_effect);

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

    ret = _menu.TrackPopupMenu(x + 20, y - 20);
    if (ret == 0) return;

    switch (ret) {
    case 10:
    case 11:
        selection_mode = ret - 10;
        window.SetProperty("selection mode", selection_mode);
        on_item_focus_change();
        break;
    case 20:
    case 21:
        rating_mode = ret - 20;
        window.SetProperty("rating_mode", rating_mode);
        on_item_focus_change();
        break;
    case 30:
        window.SetProperty("set rating 5", !set_rating_5);
        set_rating_5 = window.GetProperty("set rating 5");
        break;
    case 40:
        switch (file_attr) {
        case 32:   
            if (metadb) change_file_attr(33); //read only
            on_item_focus_change();
            break;
        case 33:
            if (metadb) change_file_attr(32); //read write
            on_item_focus_change();
            break;
        }   
        break;
    case 50:
        window.SetProperty("fade effect", !fade_effect);
        fade_effect = window.GetProperty("fade effect");
        break;
    case 100:
        window.ShowProperties();
        break;   
    case 200:
        window.ShowConfigure();     
        break;
    }
    _menu.Dispose();
    return true;
}

function get_file_attr() {   
    t_type = track_type(metadb.RawPath);
    file_attr = 0;   
   
    if (t_type == "file") {   
        for (var i = 0; i < count; i++) {           
            item = plman.GetPlaylistSelectedItems(plman.ActivePlaylist).Item(i);
            item_path = fb.Titleformat("%path%").EvalWithMetadb(item);         
            try {           
                file = fso.GetFile(item_path);           
                file_attr += parseInt(file.Attributes);           
            } catch(e) {};             
        }             
        file_attr = Math.round(file_attr / count);   
    }
   
    var file_read_only = file_attr == 32 ? false : true;
    var file_cue = t_type == "cue" ? true : false;
    var stream = t_type == "stream"  ? true : false;

    tooltip_text = file_cue ? " cue file " : file_read_only && t_type == "file" ? " file" + (count > 1 ? "s are " : " is ") + "read only " : stream ? " stream " : "";

    if ((file_cue || file_read_only || stream) && rating_mode == 1 ) {   
        readwrite = false;                 
    } else {           
        readwrite = true;                     
    }                 
}   

function change_file_attr(k) {
    t_type = track_type(metadb.RawPath);
   
    if (t_type == "file") {
        for (var i = 0; i < count; i++) {
            item = plman.GetPlaylistSelectedItems(plman.ActivePlaylist).Item(i);   
            item_path = fb.Titleformat("%path%").EvalWithMetadb(item);
            try {
                file = fso.GetFile(item_path);
                file.Attributes = k;
            } catch(e) {};
        }
    }   
}

function star(gr, x, y, img_size, fill, line_thickness, color, sh, sh_color, alpha){
    var radius = img_size / 2;
    var radius_2 = radius / 2.61803;
    line_thickness = line_thickness >= radius_2 ? radius_2 : line_thickness;
    var delta = line_thickness / 2 * Math.tan(72 / 180 * Math.PI);

    var points = [], sh_points = [];
    var x_points_1 = [], y_points_1 = [], x_points_2 = [], y_points_2 = [];

    for (var i = 0; i < 10; i++) {
        if (i % 2 == 0) {
            x_points_1.push((radius - delta) * Math.cos(Math.PI * i / 10 * 2 - Math.PI / 2));
            y_points_1.push((radius - delta) * Math.sin(Math.PI * i / 10 * 2 - Math.PI / 2));
        } else {
            x_points_2.push((radius - delta) / 2.61803 * Math.cos(Math.PI * i / 10 * 2 - Math.PI / 2));
            y_points_2.push((radius - delta) / 2.61803 * Math.sin(Math.PI * i / 10 * 2 - Math.PI / 2));
        }
    }
       
    for (var i = 0; i < 5; i++) {
        points.push(x_points_1[i] + radius, y_points_1[i] + radius, x_points_2[i] + radius, y_points_2[i] + radius);
        sh_points.push(x_points_1[i] + radius + 1, y_points_1[i] + radius + 1, x_points_2[i] + radius + 1, y_points_2[i] + radius + 1);
    }

    var img = gdi.CreateImage(img_size, img_size);
    var temp_gr = img.GetGraphics();
    temp_gr.SetSmoothingMode(2);
   
    if (line_thickness > 0) {
        sh && temp_gr.DrawPolygon(sh_color, line_thickness, sh_points);
        temp_gr.DrawPolygon(color, line_thickness, points);
    }

    if (fill && line_thickness == 0) {
        sh && temp_gr.FillPolygon(sh_color, 1, sh_points);
        temp_gr.FillPolygon(color, 1, points)
    }

    gr.DrawImage(img, x - radius, y - radius, img_size, img_size, 0, 0, img_size, img_size, 0, alpha);
   
    img.ReleaseGraphics(temp_gr);
    img.Dispose();
    temp_gr = null;
    img = null;
}

function track_type(p) {
    var type;
    if (p.indexOf("file") >= 0 && p.indexOf("cue") >= 0){
        type = "cue";
    } else if (p.indexOf("file") >= 0){
        type = "file";
    } else if (p.indexOf("cdda") >= 0){
        type = "cdda";
    } else if (p.indexOf('://') >= 0 || p.indexOf('www') >= 0 || p.indexOf("youtube") >= 0 || p.indexOf("video") >= 0 || p.indexOf("vimeo") >= 0){
        type = "stream";
    } else {
        type = "";
    }
    return type;
}

var b_hover_state, b_hover_alpha = 0;
var star_state = [];
var star_alpha = [];
check_star_state();
var b_timer_started = false;

function check_star_state() {
    star_state = [];
   
    for (var i = 0; i < 5; i++) {
        r = lbtn_down ? nrating : rating;
        if (i < r) {star_state[i] = 1} else (star_state[i] = 0);
    }
   
    if (!b_timer_started) button_alpha_timer();
}

function button_change_state() {
    if (!b_timer_started) button_alpha_timer();
    b_hover_state = 1;
}

function button_leave_change_state() {   
    if (b_hover_state != 0) {
        b_hover_state = 0;
    }
}

function button_alpha_timer() {
    b_timer_started = true;
   
    var on_step = 51;
    var off_step = 20;
   
    b_timer = window.SetInterval(function() {
        switch (b_hover_state) {
        case 0:
            b_hover_alpha = fade_effect ? Math.max(0, b_hover_alpha -= off_step) : 0;
            break;
        case 1:
            b_hover_alpha = fade_effect ? Math.min(255, b_hover_alpha += on_step) : 255;
            break;
        }
       
        for (var i = 0; i < 5; i++) {
            if (!star_alpha[i]) star_alpha[i] = 0;
           
            switch (star_state[i]) {
            case 0:
                star_alpha[i] = fade_effect ? Math.max(0, star_alpha[i] -= off_step) : 0;
                break;
            case 1:
                star_alpha[i] = fade_effect ? Math.min(255, star_alpha[i] += on_step) : 255;
                break;
            }
        }
       
        window.Repaint();

        if (!on_mouse){
            var tmp_off = [];
            var tmp_on = [];
            for(var i = 0; i < star_alpha.length; i++) {
                if (star_state[i] != 1) tmp_off.push(star_alpha[i]);
                if (star_state[i] == 1) tmp_on.push(star_alpha[i]);
            }
       
            if (b_hover_alpha <= 0 && Math.max.apply(null, tmp_off) <= 0 && Math.min.apply(null, tmp_on) >= 255){
                window.ClearInterval(b_timer);
                b_timer_started = false;
            }
        }
    }, 30);
}

function info_tooltip() {
    tooltip_on = true;
    window.Repaint();
    tooltip_timer &&  window.ClearTimeout(tooltip_timer);
    tooltip_timer = window.SetTimeout(function() {
        tooltip_on = false;
        window.Repaint();
        tooltip_timer && window.ClearTimeout(tooltip_timer);
    }, 1000);
}

function clear_tooltip_timer(){
    if (tooltip_timer){
        tooltip_on = false;
        window.ClearInterval(tooltip_timer);
    }
}

function draw_tooltip(gr){
    w_tt = 4 * (star_size + offset) + star_size;
    x_tt = x_s - star_size / 2;
    h_tt = gr.CalcTextHeight("0", font) + 2;
    y_tt = y_s - h_tt * 0.5;

    gr.GdiDrawText( tooltip_text, font, color1, x_tt, y_tt, w_tt, h_tt, DT_SINGLELINE | DT_CENTER | DT_VCENTER | DT_WORD_ELLIPSIS);
}

function print(msg) {
    fb.trace(msg);
}
AHAPXICT M
Аватара
Откуда: Киев
Репутация: 252
С нами: 10 лет 4 месяца

Сообщение #2180 Aliado_71 » 17.02.2018, 02:03

AHAPXICT, Что тебе сказать, кроме уважения, ты меня уже не первый раз выручаешь, рейтинг просто идеально лег на мою новую примитивную сборку :smile:

Изображение
Aliado_71
Аватара
Откуда: Украина
Репутация: 200
С нами: 9 лет

Пред.След.

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