"Наверное лучше будет попробовать сделать изменение ширины колонок при нажатой лев.кл.(с полным перекрытием наименований)"
Да, это будет удобно, спасибо
ЗЫ: наверное, из-за того, что у меня пока мало сообщений/баллов не могу плюсануть
Список разделов › foobar2000 › Секреты foobar2000
// ==PREPROCESSOR==
// @name "Properties & properties file"
// @author "kgena_ua"
// @version "24032017"
// @feature "v1.4"
// @feature "watch-metadb"
// ==/PREPROCESSOR==
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)); }
DT_LEFT = 0x00000000;
DT_RIGHT = 0x00000002;
DT_CENTER = 0x00000001;
DT_VCENTER = 0x00000004;
DT_SINGLELINE = 0x00000020;
DT_WORD_ELLIPSIS = 0x00040000;
DT_WORDBREAK = 0x00000010;
DT_CALCRECT = 0x00000400;
DT_NOPREFIX = 0x00000800;
var ww, wh, wh_old;
IDC_HAND = 32649;
IDC_ARROW = 32512;
IDC_SIZEWE = 32644;
MF_ENABLED = 0x00000000;
MF_GRAYED = 0x00000001;
MF_SEPARATOR = 0x00000800;
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 font_name_item_name = window.GetProperty(" font name: item name", "Arial");
var font_name_item_value = window.GetProperty(" font name: item value", "Arial");
var font_name_group = window.GetProperty(" font name: group", "Arial");
var font_size_item_name = window.GetProperty(" font size: item name", 11);
var font_size_item_value = window.GetProperty(" font size: item value", 12);
var font_size_group = window.GetProperty(" font size: group", 11);
var font_style_item_name = window.GetProperty(" font style: item name", 0);
var font_style_item_value = window.GetProperty(" font style: item value", 0);
var font_style_group = window.GetProperty(" font style: group", 0);
var font_item, font_group;
get_font();
function get_font(){
font_item_name = gdi.Font(font_name_item_name, font_size_item_name, font_style_item_name);
font_item_value = gdi.Font(font_name_item_value, font_size_item_value, font_style_item_value);
font_group = gdi.Font(font_name_group, font_size_group, font_style_group);
}
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.GetColorCUI(ColorTypeCUI.background);
color_item_name = window.GetColorCUI(ColorTypeCUI.text);
color_item_value = window.GetColorCUI(ColorTypeCUI.inactive_selection_text);
color_group_text = window.GetColorCUI(ColorTypeCUI.inactive_selection_background);
} else if (window.InstanceType == 1) {
bgcolor = window.GetColorDUI(ColorTypeDUI.background);
color_item_name = window.GetColorDUI(ColorTypeDUI.text);
color_item_value = window.GetColorDUI(ColorTypeDUI.highlight);
color_group_text = window.GetColorDUI(ColorTypeDUI.selection);
}
window.Repaint();
}
get_color();
function on_colors_changed(){
get_color();
}
var custom_colors = window.GetProperty(" colors: custom", false);
var c_bgcolor = customColor(window.GetProperty(" color: background", "0-0-0"));
var c_color_item_name = customColor(window.GetProperty(" color: item name", "180-180-180"));
var c_color_item_value = customColor(window.GetProperty(" color: item value", "255-255-220"));
var c_color_group_text = customColor(window.GetProperty(" color: group text", "100-100-100"));
bgcolor = custom_colors ? c_bgcolor : bgcolor;
color_item_name = custom_colors ? c_color_item_name : color_item_name;
color_item_value = custom_colors ? c_color_item_value : color_item_value;
color_group_text = custom_colors ? c_color_group_text : color_group_text;
function customColor(colour){
tempc = colour.split("-");
return (0xff000000 | (tempc[0]<<16) | (tempc[1]<<8) | (tempc[2]));
}
var tooltip = window.CreateTooltip();
tooltip.SetMaxWidth(300);
var tstring = 0;
var delay_flag = false;
var timer;
window.GetProperty("tooltip", false);
var selection_mode = window.GetProperty("selection_mode", 0);
var item_name_array = [];
var item_value_array = [];
var value_width = [];
var name, value;
var similar_artist_text = "";
var similar_artist = [];
var default_dim = window.GetProperty("default dim", true);
var group_text = window.GetProperty("group text", false);
var vertical_item_padding = window.GetProperty(" vertical item padding", 1);
var t_h;
var t_x1 = window.GetProperty(" text: x", 10);
var t_x2;
window.GetProperty("text: x2 custom", 0);
var t_x3;
var lbtn_down = false;
var drag_x = 0, drag_y = 0;
var move_x = false, move_y = false
var s = 0;
var pos_y, pos_x;
var old_x, old_y;
function on_paint(gr) {
!window.IsTransparent && gr.FillSolidRect(0, 0, ww, wh, bgcolor);
draw_array(gr);
gr.GdiDrawText( "", font_item_value, color_item_value, 0, 120, ww, wh, DT_RIGHT | DT_WORD_ELLIPSIS);
}
var tfname = [
"$meta(artist)",
"%title%",
"%album%",
"%date%",
"%genre%",
"%composer%",
"%performer%",
"%publisher%",
"$meta(album artist)",
"%track number%",
"%totaltracks%",
"%discnumber%",
"%totaldiscs%",
"%comment%",
"%discid%",
"%rating%",
"$meta(rating)",
"%label%",
"%subtitle%",
"group general",
"$info(samplerate)",
"$info(channels)",
"$info(bitspersample)",
"$info(bitrate)",
"%codec%",
"$info(codec_profile)",
"$info(encoding)",
"%length%",
"$info(tool)",
"$info(cue_embedded)",
"group location",
"%filename_ext%",
"$directory_path(%path%)",
"%subsong%",
"%filesize_natural%",
"%last_modified%",
"%folder name%",
"group playback statistics",
"%play_count%",
"%first_played%",
"%last_played%",
"%added%",
"group last.FM",
"%lastfm_bio%",
"%lastfm_artist_playcount%",
"%lastfm_artist_listeners%",
"%lastfm_album_playcount%",
"%lastfm_album_listeners%",
"%lastfm_album_content%",
"%lastfm_similar_artist%"
];
function set_cursor(x, y) {
if (move_y || lbtn_down) window.SetCursor(IDC_HAND);
if (move_x && !lbtn_down) window.SetCursor(IDC_SIZEWE);
}
function on_mouse_lbtn_down(x, y) {
lbtn_down = true;
if (move_y) drag_y = (y - s);
if (move_x) drag_x = x - t_x2;
set_cursor(x, y);
}
function on_mouse_lbtn_up(x, y) {
lbtn_down = false;
if (move_x) window.SetProperty("text: x2 custom", t_x2);
}
function on_mouse_move(x, y) {
mouse_on_pos(x, y);
set_cursor(x, y);
pos_y = y;
pos_x = x;
if (old_y != y || old_x != x){
TooltipActivate(x, y);
old_y = y;
old_x = x;
}
if (lbtn_down && move_y) {
if (s <= 0 && (item_name_array.length * t_h) >= wh) {s = y - drag_y};
applyDelta();
}
shift_down = utils.IsKeyPressed(0x10) ? true : false;
if (!shift_down) drag_x = x - t_x2;
if (lbtn_down && move_x) {
default_dim = false;
window.SetProperty("default dim", default_dim);
tmp_t_x2 = x - drag_x;
t_x2 = tmp_t_x2 <= t_x1 ? t_x1 : tmp_t_x2 >= ww - t_x1 - 50 ? ww - t_x1 - 50 : tmp_t_x2;
}
window.Repaint();
}
function on_mouse_wheel(step) {
if (s <= 0 && item_name_array.length * t_h >= wh) {s = s + step * t_h};
applyDelta();
}
function applyDelta() {
s = s > 0 ? 0 : s;
s = s < (wh - item_name_array.length * t_h) && s < 0 ? (wh - item_name_array.length * t_h) : s;
window.Repaint();
}
function on_mouse_leave() {
tooltip.TrackActivate = false;
window.SetCursor(IDC_ARROW);
window.Repaint();
}
function mouse_on_pos(x, y){
ShiftDown = utils.IsKeyPressed(0x10) ? true : false;
if (ShiftDown && x >= t_x2) {
move_x = true;
move_y = false;
} else {
move_y = true;
move_x = false;
}
}
function on_size() {
ww = window.Width;
wh = window.Height;
if (wh != wh_old && s < 0) {
s = wh >= wh_old ? 0 : s;
wh_old = wh;
}
}
function TooltipActivate(x,y) {
tstring = Math.floor((pos_y + Math.abs(s)) / t_h);
if (value_width[tstring * 2] > ww - t_x2 - t_x1 && x > t_x2 && window.GetProperty("tooltip")){
tooltip.Text = value_width[tstring * 2 + 1];
delay();
delay_flag && tooltip.Activate();
tooltip.TrackActivate = true;
tooltip.TrackPosition(x + 15, y - 10);
} else {
delay_flag = false;
tooltip.Deactivate();
}
}
function delay() {
delay_flag && window.ClearTimeout(timer);
timer = window.SetTimeout(function() {
delay_flag = true;
window.ClearTimeout(timer);
}, 1000);
}
function clear_name(n) {
return n.replace(/.*\(|lastfm_|[^a-z\s\_]/g,"").replace(/_/g," ")
}
var measure = {
'bitrate' : " kbps",
'samplerate' : " Hz",
'bitspersample' : " bps",
'channels' : " ch",
'playcount' : " times"
}
function create_array() {
var temp_bmp = gdi.CreateImage(1, 1);
var temp_gr = temp_bmp.GetGraphics();
item_name_array = [];
item_value_array = [];
value_width = [];
t_x2 = 0;
similar_artist_text = "";
similar_artist = [];
for (j = 0; j < tfname.length; j++) {
group = tfname[j].search('group') >= 0 ? true : false;
value = Eval(tfname[j]);
print(value);
if (value || group) {
item_name_array.push(tfname[j]);
if (tfname[j] != "%lastfm_similar_artist%"){
item_value_array.push(value);
value_width.push(temp_gr.CalcTextWidth(value, font_item_value),value);
}
if (tfname[j] == "%lastfm_similar_artist%") similar_artist_text = value.replace(/(')/g, "'").replace(/;/g, ";\n");
}
if (!group){
tmp_t_x2 = temp_gr.CalcTextWidth(clear_name(tfname[j]), font_item_name);
t_x2 = tmp_t_x2 > t_x2 ? tmp_t_x2 : t_x2;
}
}
t_x2 = default_dim ? t_x2 + t_x1 + 10 : window.GetProperty("text: x2 custom");
value_string_width = window.Width - t_x2 - t_x1;
if (similar_artist_text){
similar_artist = temp_gr.EstimateLineWrap(similar_artist_text, font_item_value, value_string_width).toArray();
for (var i = 0; i < similar_artist.length; i += 2) {
if (i >= 2) item_name_array.push("");
item_value_array.push(similar_artist[i].replace(/^\s+|\s+$/g, ""));
}
}
temp_bmp.ReleaseGraphics(temp_gr);
temp_bmp.Dispose();
temp_gr = null;
temp_bmp = null;
if (item_name_array.length * t_h < wh && s < 0) s = 0;
}
function draw_array(gr) {
f_h_name = gr.CalcTextHeight("Text", font_item_name);
f_h_value = gr.CalcTextHeight("Text", font_item_value);
f_h = Math.max(f_h_name, f_h_value);
t_h = f_h + window.GetProperty(" vertical item padding");
star_size = f_h_value - 3;
star_offset = star_size + 2;
for (var i = 0; i < item_name_array.length; i++) {
group = item_name_array[i].search('group') >= 0 ? true : false;
font = group ? font_group : font_item_name;
color = group ? color_group_text : color_item_name;
t_y = i * t_h + s;
l_y = t_y + t_h / 2;
if (!group){
name = clear_name(item_name_array[i]);
} else {
name = group_text ? item_name_array[i].replace(/group\s/g,"").replace(/(?=.)/g," ").replace(/^\s/g,"") : "";
}
rating_text = item_name_array[i] == "$meta(rating)" ? " (tag)" : "";
g_w = !group ? Math.min(t_x2 - 20, ww - t_x1 * 2) : ww - t_x1 * 2;
gr.GdiDrawText(name + rating_text, font, color, t_x1, t_y, g_w, t_h, DT_LEFT | DT_SINGLELINE | DT_VCENTER | DT_WORD_ELLIPSIS | DT_NOPREFIX);
t_w = group_text ? gr.CalcTextWidth(name, font) + 5 : 0;
group && gr.DrawLine(t_x1 + t_w, l_y, ww - t_x1, l_y, 1, color);
if (item_name_array[i] == "%rating%" || item_name_array[i] == "$meta(rating)") {
for (var r = 0; r < item_value_array[i] * star_offset; r = r + star_offset) {
draw_star(gr, t_x2 + star_size / 3 + r, t_y + t_h / 2, star_size, true, 0, color_item_value, false, bgcolor, 255);
}
} else {
value = item_value_array[i];
gr.GdiDrawText( value, font_item_value, color_item_value, t_x2, t_y, ww - t_x2 - t_x1, t_h, DT_LEFT | DT_SINGLELINE | DT_VCENTER | DT_WORD_ELLIPSIS | DT_NOPREFIX);
t_x3 = t_x2 + gr.CalcTextWidth(value, font_item_value);
tmp = clear_name(item_name_array[i]).replace(/\s/g,"");
gr.GdiDrawText( measure[tmp], font_item_value, color_group_text, t_x3, t_y, ww - t_x3 - t_x1, t_h, DT_LEFT | DT_SINGLELINE | DT_VCENTER | DT_WORD_ELLIPSIS | DT_NOPREFIX);
}
}
}
var metadb;
on_item_focus_change();
function on_playlist_switch() {
on_item_focus_change();
}
function on_playback_new_track() {
on_item_focus_change();
}
function on_playback_dynamic_info_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() {
create_array();
window.Repaint();
}
function Eval(field) {
if (metadb) {
type = metadb.RawPath;
if (type.indexOf("file") > 0){
return fb.TitleFormat("[" + field + "]").EvalWithMetadb(metadb);
} else{
if (selection_mode == 0){
if (field == "$meta(artist)" || field == "%title%"){
return fb.TitleFormat("[" + field + "]").Eval(true);
}
if (field == "%genre%"){
return fb.TitleFormat("[" + field + "]").EvalWithMetadb(metadb);
}
}
return fb.TitleFormat("[" + field + "]").EvalWithMetadb(metadb);
}
}
}
function on_mouse_rbtn_up (x, y){
var _menu = window.CreatePopupMenu();
_menu.AppendMenuItem(MF_ENABLED, 1, "Prefer now playing");
_menu.AppendMenuItem(MF_ENABLED, 2, "Follow selected track");
_menu.CheckMenuRadioItem(1, 2, selection_mode + 1);
_menu.EnableMenuItem(selection_mode + 1, 1);
_menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
_menu.AppendMenuItem(MF_ENABLED, 3, "Group text");
_menu.CheckMenuItem(3, group_text);
_menu.AppendMenuItem(MF_ENABLED, 4, "Tooltip");
_menu.CheckMenuItem(4, window.GetProperty("Tooltip"));
_menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
_menu.AppendMenuItem(MF_ENABLED, 5, "Create txt/xls file");
_menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
_menu.AppendMenuItem(MF_ENABLED, 6, default_dim ? "Default dim" : "Set default dim");
_menu.CheckMenuItem(6, default_dim);
_menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
_menu.AppendMenuItem(MF_ENABLED, 10, "Reload");
_menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
_menu.AppendMenuItem(MF_ENABLED, 20, "Properties");
_menu.AppendMenuItem(MF_ENABLED, 30, "Configure ...");
ret = _menu.TrackPopupMenu(x,y);
switch (ret) {
case 1:
selection_mode = 0;
window.SetProperty("selection_mode", selection_mode);
on_item_focus_change();
break;
case 2:
selection_mode = 1;
window.SetProperty("selection_mode", selection_mode);
on_item_focus_change();
break;
case 3:
window.SetProperty("group text", !group_text);
group_text = window.GetProperty("group text");
break;
case 4:
!window.GetProperty("tooltip") ? window.SetProperty("tooltip", true) : window.SetProperty("tooltip", false);
break;
case 5:
menu_create_file(x,y);
break;
case 6:
default_dim = true;
window.SetProperty("default dim", default_dim);
create_array();
break;
case 10:
try {
window.Reload();
} catch(e) {};
break;
case 20:
window.ShowProperties();
break;
case 30:
window.ShowConfigure();
break;
}
_menu.Dispose();
return true;
}
///////////////////////////// Create file
var fso = new ActiveXObject("Scripting.FileSystemObject");
var output_path = fb.ProfilePath + "\\tmp_Properties\\";
function check_folder(n) {
if (!n) return;
try {
if(!fso.FolderExists(n)) {fso.CreateFolder(n)};
} catch(e) {}
}
window.GetProperty("ext",1);
var separator = Array(" ; ","\t");
var tmp_item_name_array = [];
var selected;
var shift = 0;;
var output_array = [];
var pllist_name;
create_tmp_item_name_array();
function create_tmp_item_name_array() {
for (var j = 0; j < tfname.length; j++) {
if (tfname[j].search(/group|%lastfm/g) < 0){
//if (tfname[j].indexOf('group') < 0 || tfname[j].indexOf('%lastfm') < 0){
tmp_item_name_array.push(tfname[j]);
}
}
}
for (var j = 0; j < tmp_item_name_array.length; j++) {
window.GetProperty(j + 1,0);
}
function create_output_array() {
output_array = [];
for (var j = 0; j < tmp_item_name_array.length; j++) {
selected = window.GetProperty(j + 1);
if ( selected == 1 ) {output_array.push(tmp_item_name_array[j])};
}
createTextFile();
}
function createTextFile(){
check_folder(output_path);
count = plman.GetPlaylistSelectedItems(plman.ActivePlaylist).Count;
if (count == 0 || output_array.length == 0) return;
if (window.GetProperty("ext") == 0) {
output_file = output_path + "plist " + pllist_name + ".txt";
} else {
output_file = output_path + "plist " + pllist_name + ".xls";
}
try { file = fso.CreateTextFile( output_file )
} catch(e) { return };
var text_item_name = [];
var string_item_name = "";
for (var j = 0; j < output_array.length; j++) {
text_item_name.push(output_array[j]);
}
string_item_name = text_item_name.join(separator[window.GetProperty("ext")]);
file.WriteLine(string_item_name);
file.WriteLine("");
for (var i = 0; i < count; i++) {
item = plman.GetPlaylistSelectedItems(plman.ActivePlaylist).Item(i);
var text_item_value = [];
var string_item_value = "";
for (var j = 0; j < output_array.length; j++) {
value = fb.TitleFormat("[" + output_array[j] + "]").EvalWithMetadb(item);
tmp = clear_name(output_array[j]).replace(/\s/g,"");
tmp = value && measure[tmp] ? measure[tmp] : "";
text_item_value.push(value + tmp);
string_item_value = text_item_value.join(separator[window.GetProperty("ext")]);
}
try { file.WriteLine(string_item_value);
} catch(e) {};
}
file.Close();
}
function menu_create_file(x, y){
var _menu = window.CreatePopupMenu();
var i = 1;
count = plman.GetPlaylistSelectedItems(plman.ActivePlaylist).Count;
MF_STRING = count == 0 ? MF_GRAYED : MF_ENABLED;
pllist_name = plman.GetPlaylistName(plman.ActivePlaylist);
pllist_name = count == 0 ? "*" : pllist_name.replace(/[\/\:\*\?\"\<\>\|]/g,'');
_menu.AppendMenuItem(MF_STRING, i++, "Create " + pllist_name + (window.GetProperty("ext") == 0 ? ".txt" : ".xls"));
_menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
var lines = 20;
tl = 0 + shift;
bl = tmp_item_name_array.length > lines ? lines + shift : tmp_item_name_array.length;
for (var j = tl; j < bl; j++) {
menuItem = tmp_item_name_array[j].replace(/[%\$\(\)]|info|meta/g,'').replace(/_/g,' ');
_menu.AppendMenuItem(MF_ENABLED, i++, menuItem);
_menu.CheckMenuItem(i-1, window.GetProperty(i - 2 + shift));
}
_menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
_menu.AppendMenuItem(MF_ENABLED, 100, "txt");
_menu.AppendMenuItem(MF_ENABLED, 101, "xls");
_menu.CheckMenuRadioItem(100, 101, 100 + window.GetProperty("ext"));
_menu.EnableMenuItem(100 + window.GetProperty("ext"), 1);
_menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
_menu.AppendMenuItem(MF_ENABLED, 110, "Select all");
_menu.AppendMenuItem(MF_ENABLED, 120, "Clear all");
if (tmp_item_name_array.length > lines) {
_menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
_menu.AppendMenuItem(shift == 0 ? MF_GRAYED : MF_ENABLED, 130, "Up");
_menu.AppendMenuItem(shift + lines >= tmp_item_name_array.length ? MF_GRAYED : MF_ENABLED, 140, "Down");
}
ret = _menu.TrackPopupMenu(x, y - 250);
switch (true) {
case (ret == 1):
create_output_array();
break;
case (ret >= 2 && ret <= tmp_item_name_array.length + 1):
selected = window.GetProperty(ret - 1 + shift);
window.SetProperty(ret - 1 + shift, selected == 0 ? 1 : 0);
menu_create_file(x,y);
break;
case (ret == 100):
window.SetProperty("ext", 0);
menu_create_file(x,y);
break;
case (ret == 101):
window.SetProperty("ext", 1);
menu_create_file(x,y);
break;
case (ret == 110):
for (var j = 1; j < tmp_item_name_array.length + 1; j++) {
window.SetProperty(j, 1);
}
menu_create_file(x,y);
break;
case (ret == 120):
for (var j = 1; j < tmp_item_name_array.length + 1; j++) {
window.SetProperty(j, 0);
}
menu_create_file(x,y);
break;
case (ret == 130):
shift = shift - 1;
menu_create_file(x,y);
break;
case (ret == 140):
shift = shift + 1;
menu_create_file(x,y);
break;
}
_menu.Dispose();
}
///////////////////////////// Draw star
function draw_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 print(msg) {
fb.trace(msg);
}
San_dr, и не надо "снимать". Просто двигайте shift +лев.кл.м.San_dr:птица не снимается
... так и для всех. Я думаю будет интересно и познавательно. Изучение чужих сборок многое дает.San_dr:..........кинуть сборку в личку
Поддерживаю...kgena_ua:... так и для всех. Изучение чужих сборок многое дает.San_dr:..........кинуть сборку в личку
Да, всё отображается, я с цветами не разобрался и со слепу бледных звёзд не видел. Теперь о моей DUI сборке - закончил и выкладываю пока здесь, - раз есть у людей желание, но есть вопросы, которые , может быть, решаться. Сборка показывает все картинки в файле трека, все веб-картинки (арт/альбом) и ноковер. Чтобы пояснить чего хочу - расскажу как возникла идея. Началось с того, что я захотел, чтобы скрипт "Biography Picture. www.last.fm" показывал только то, что интересно мне (картинки по выбору Арт/Альбом) и был "полегче" - т.е. я вычищал из него строки , где "текст" и на каком-то этапе обнаружил, чтол он стал начинать показ картинок позже оригинала. Поскольку я не программер, то найти это место, которое я зацепил для меня сложно и я придумал такой ход - агрегатировал два окна рядом, одно над другим "Biography Picture. www.last.fm" и "Get Covers (Artwork) && radio logos". "Ведущий скрипт - Biography, когда найдены картинки - он разворачивается на размер всего окна, закрывая Artwork, а когда их нет - "схлопывается" до 3пикселей высоты, открывая Artwork. В Artwork выбрал цикл 5 сек (чтобы успел показать свои картинки до того, как "включится" Biography Picture. Всё работает. Даже если нет сети - показывает (Artwork), а с сетью он успевает показать несколько картинок и сменяется Biography Picture. Всё это зрительно в одном окне.kgena_ua:если значения прописаны, то они отображаются.
// ==PREPROCESSOR==
// @name "Properties & properties file"
// @author "kgena_ua"
// @version "25032017"
// @feature "v1.4"
// @feature "watch-metadb"
// ==/PREPROCESSOR==
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)); }
DT_LEFT = 0x00000000;
DT_RIGHT = 0x00000002;
DT_CENTER = 0x00000001;
DT_VCENTER = 0x00000004;
DT_SINGLELINE = 0x00000020;
DT_WORD_ELLIPSIS = 0x00040000;
DT_WORDBREAK = 0x00000010;
DT_CALCRECT = 0x00000400;
DT_NOPREFIX = 0x00000800;
var ww, wh, wh_old;
IDC_HAND = 32649;
IDC_ARROW = 32512;
IDC_SIZEWE = 32644;
MF_ENABLED = 0x00000000;
MF_GRAYED = 0x00000001;
MF_SEPARATOR = 0x00000800;
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 font_name_item_name = window.GetProperty(" font name: item name", "Arial");
var font_name_item_value = window.GetProperty(" font name: item value", "Arial");
var font_name_group = window.GetProperty(" font name: group", "Arial");
var font_size_item_name = window.GetProperty(" font size: item name", 11);
var font_size_item_value = window.GetProperty(" font size: item value", 12);
var font_size_group = window.GetProperty(" font size: group", 11);
var font_style_item_name = window.GetProperty(" font style: item name", 0);
var font_style_item_value = window.GetProperty(" font style: item value", 0);
var font_style_group = window.GetProperty(" font style: group", 0);
var font_item, font_group;
get_font();
function get_font(){
font_item_name = gdi.Font(font_name_item_name, font_size_item_name, font_style_item_name);
font_item_value = gdi.Font(font_name_item_value, font_size_item_value, font_style_item_value);
font_group = gdi.Font(font_name_group, font_size_group, font_style_group);
}
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.GetColorCUI(ColorTypeCUI.background);
color_item_name = window.GetColorCUI(ColorTypeCUI.text);
color_item_value = window.GetColorCUI(ColorTypeCUI.inactive_selection_text);
color_group_text = window.GetColorCUI(ColorTypeCUI.inactive_selection_background);
} else if (window.InstanceType == 1) {
bgcolor = window.GetColorDUI(ColorTypeDUI.background);
color_item_name = window.GetColorDUI(ColorTypeDUI.text);
color_item_value = window.GetColorDUI(ColorTypeDUI.highlight);
color_group_text = window.GetColorDUI(ColorTypeDUI.selection);
}
window.Repaint();
}
get_color();
function on_colors_changed(){
get_color();
}
var custom_colors = window.GetProperty(" colors: custom", false);
var c_bgcolor = customColor(window.GetProperty(" color: background", "0-0-0"));
var c_color_item_name = customColor(window.GetProperty(" color: item name", "180-180-180"));
var c_color_item_value = customColor(window.GetProperty(" color: item value", "255-255-220"));
var c_color_group_text = customColor(window.GetProperty(" color: group text", "100-100-100"));
bgcolor = custom_colors ? c_bgcolor : bgcolor;
color_item_name = custom_colors ? c_color_item_name : color_item_name;
color_item_value = custom_colors ? c_color_item_value : color_item_value;
color_group_text = custom_colors ? c_color_group_text : color_group_text;
function customColor(colour){
tempc = colour.split("-");
return (0xff000000 | (tempc[0]<<16) | (tempc[1]<<8) | (tempc[2]));
}
var tooltip = window.CreateTooltip();
tooltip.SetMaxWidth(300);
var tstring = 0;
var delay_flag = false;
var timer;
window.GetProperty("tooltip", false);
var selection_mode = window.GetProperty("selection_mode", 0);
var item_name_array = [];
var item_value_array = [];
var value_width = [];
var name, value;
var similar_artist_text = "";
var similar_artist = [];
var default_dim = window.GetProperty("default dim", true);
var group_text = window.GetProperty("group text", false);
var vertical_item_padding = window.GetProperty(" vertical item padding", 1);
var t_h;
var t_x1 = window.GetProperty(" text: x", 10);
var t_x2;
window.GetProperty("text: x2 custom", 0);
var t_x3;
var lbtn_down = false;
var drag_x = 0, drag_y = 0;
var move_x = false, move_y = false
var s = 0;
var pos_y, pos_x;
var old_x, old_y;
function on_paint(gr) {
!window.IsTransparent && gr.FillSolidRect(0, 0, ww, wh, bgcolor);
draw_array(gr);
gr.GdiDrawText( "", font_item_value, color_item_value, 0, 120, ww, wh, DT_RIGHT | DT_WORD_ELLIPSIS);
}
var tfname = [
"$meta(artist)",
"%title%",
"%album%",
"%date%",
"%genre%",
"%composer%",
"%performer%",
"%publisher%",
"$meta(album artist)",
"%track number%",
"%totaltracks%",
"%discnumber%",
"%totaldiscs%",
"%rating%",
"$meta(rating)",
"%comment%",
"%catalog%",
"%discid%",
"%label%",
"%publisher%",
"%subtitle%",
"group general",
"$info(samplerate)",
"$info(channels)",
"$info(bitspersample)",
"$info(bitrate)",
"%codec%",
"$info(codec_profile)",
"$info(mp3_stereo_mode)",
"$info(encoding)",
"%length%",
"$info(tool)",
"$info(cue_embedded)",
"group location",
"%filename_ext%",
"$directory_path(%path%)",
"%subsong%",
"%filesize_natural%",
"%last_modified%",
"%folder name%",
"group playback statistics",
"%play_count%",
"%first_played%",
"%last_played%",
"%added%",
"group last.FM",
"%lastfm_bio%",
"%lastfm_artist_playcount%",
"%lastfm_artist_listeners%",
"%lastfm_album_playcount%",
"%lastfm_album_listeners%",
"%lastfm_album_content%",
"group ",
"%lastfm_similar_artist%"
];
function set_cursor(x, y) {
if (move_y || lbtn_down) window.SetCursor(IDC_HAND);
if (move_x && !lbtn_down) window.SetCursor(IDC_SIZEWE);
}
function on_mouse_lbtn_down(x, y) {
lbtn_down = true;
if (move_y) drag_y = (y - s);
if (move_x) drag_x = x - t_x2;
set_cursor(x, y);
}
function on_mouse_lbtn_up(x, y) {
lbtn_down = false;
if (move_x) window.SetProperty("text: x2 custom", t_x2);
}
function on_mouse_move(x, y) {
mouse_on_pos(x, y);
set_cursor(x, y);
pos_y = y;
pos_x = x;
if (old_y != y || old_x != x){
TooltipActivate(x, y);
old_y = y;
old_x = x;
}
if (lbtn_down && move_y) {
if (s <= 0 && (item_name_array.length * t_h) >= wh) {s = y - drag_y};
applyDelta();
}
shift_down = utils.IsKeyPressed(0x10) ? true : false;
if (!shift_down) drag_x = x - t_x2;
if (lbtn_down && move_x) {
default_dim = false;
window.SetProperty("default dim", default_dim);
tmp_t_x2 = x - drag_x;
t_x2 = tmp_t_x2 <= t_x1 ? t_x1 : tmp_t_x2 >= ww - t_x1 - 50 ? ww - t_x1 - 50 : tmp_t_x2;
}
window.Repaint();
}
function on_mouse_wheel(step) {
if (s <= 0 && item_name_array.length * t_h >= wh) {s = s + step * t_h};
applyDelta();
}
function applyDelta() {
s = s > 0 ? 0 : s;
s = s < (wh - item_name_array.length * t_h) && s < 0 ? (wh - item_name_array.length * t_h) : s;
window.Repaint();
}
function on_mouse_leave() {
tooltip.TrackActivate = false;
window.SetCursor(IDC_ARROW);
window.Repaint();
}
function mouse_on_pos(x, y){
ShiftDown = utils.IsKeyPressed(0x10) ? true : false;
if (ShiftDown && x >= t_x2) {
move_x = true;
move_y = false;
} else {
move_y = true;
move_x = false;
}
}
function on_size() {
ww = window.Width;
wh = window.Height;
if (wh != wh_old && s < 0) {
s = wh >= wh_old ? 0 : s;
wh_old = wh;
}
}
function TooltipActivate(x,y) {
tstring = Math.floor((pos_y + Math.abs(s)) / t_h);
if (value_width[tstring * 2] > ww - t_x2 - t_x1 && x > t_x2 && window.GetProperty("tooltip")){
tooltip.Text = value_width[tstring * 2 + 1];
delay();
delay_flag && tooltip.Activate();
tooltip.TrackActivate = true;
tooltip.TrackPosition(x + 15, y - 10);
} else {
delay_flag = false;
tooltip.Deactivate();
}
}
function delay() {
delay_flag && window.ClearTimeout(timer);
timer = window.SetTimeout(function() {
delay_flag = true;
window.ClearTimeout(timer);
}, 1000);
}
function clear_name(n) {
return n.replace(/.*\(|lastfm_|[^a-z0-9\s\_]/g,"").replace(/_/g," ");
//return n.replace(/.*\((?!\))|lastfm_|[^a-z0-9\s\_]/g,"").replace(/_/g," ");
}
var measure = {
'bitrate' : " kbps",
'samplerate' : " Hz",
'bitspersample' : " bps",
'channels' : " ch",
'playcount' : " times"
}
function create_array() {
var temp_bmp = gdi.CreateImage(1, 1);
var temp_gr = temp_bmp.GetGraphics();
item_name_array = [];
item_value_array = [];
value_width = [];
t_x2 = 0;
similar_artist_text = "";
similar_artist = [];
for (j = 0; j < tfname.length; j++) {
group = tfname[j].search('group') >= 0 ? true : false;
value = Eval(tfname[j]);
if (value || group) {
item_name_array.push(tfname[j]);
if (tfname[j] != "%lastfm_similar_artist%"){
item_value_array.push(value);
value_width.push(temp_gr.CalcTextWidth(value, font_item_value),value);
}
if (tfname[j] == "%lastfm_similar_artist%") similar_artist_text = value.replace(/(')/g, "'").replace(/;/g, ";\n");
}
if (!group){
tmp_t_x2 = temp_gr.CalcTextWidth(clear_name(tfname[j]), font_item_name);
t_x2 = tmp_t_x2 > t_x2 ? tmp_t_x2 : t_x2;
}
}
t_x2 = default_dim ? t_x2 + t_x1 + 10 : window.GetProperty("text: x2 custom");
value_string_width = window.Width - t_x2 - t_x1;
if (similar_artist_text){
similar_artist = temp_gr.EstimateLineWrap(similar_artist_text, font_item_value, value_string_width).toArray();
for (var i = 0; i < similar_artist.length; i += 2) {
if (i >= 2) item_name_array.push("");
item_value_array.push(similar_artist[i].replace(/^\s+|\s+$/g, ""));
}
}
temp_bmp.ReleaseGraphics(temp_gr);
temp_bmp.Dispose();
temp_gr = null;
temp_bmp = null;
if (item_name_array.length * t_h < wh && s < 0) s = 0;
}
function draw_array(gr) {
f_h_name = gr.CalcTextHeight("Text", font_item_name);
f_h_value = gr.CalcTextHeight("Text", font_item_value);
f_h = Math.max(f_h_name, f_h_value);
t_h = f_h + window.GetProperty(" vertical item padding");
star_size = f_h_value - 3;
star_offset = star_size + 2;
for (var i = 0; i < item_name_array.length; i++) {
group = item_name_array[i].search('group') >= 0 ? true : false;
font = group ? font_group : font_item_name;
color = group ? color_group_text : color_item_name;
t_y = i * t_h + s;
l_y = t_y + t_h / 2;
rating_text = "";
if (!group){
name = clear_name(item_name_array[i]);
rating_text = item_name_array[i] == "$meta(rating)" ? " (tag)" : "";
t_w = Math.min(t_x2 - 20, ww - t_x1 * 2);
gr.GdiDrawText(name + rating_text, font, color, t_x1, t_y, t_w, t_h, DT_LEFT | DT_SINGLELINE | DT_VCENTER | DT_WORD_ELLIPSIS | DT_NOPREFIX);
}
if (group){
if (item_value_array[i + 1]){
name = group_text ? item_name_array[i].replace(/group\s/g,"").replace(/(?=.)/g," ").replace(/^\s/g,"") : "";
t_w = ww - t_x1 * 2;
gr.GdiDrawText(name + rating_text, font, color, t_x1, t_y, t_w, t_h, DT_LEFT | DT_SINGLELINE | DT_VCENTER | DT_WORD_ELLIPSIS | DT_NOPREFIX);
g_w = group_text && name ? gr.CalcTextWidth(name, font) + 5 : 0;
group && gr.DrawLine(t_x1 + g_w, l_y, ww - t_x1, l_y, 1, color);
}
}
if (item_name_array[i] == "%rating%" || item_name_array[i] == "$meta(rating)") {
for (var r = 0; r < item_value_array[i] * star_offset; r = r + star_offset) {
draw_star(gr, t_x2 + star_size / 3 + r, t_y + t_h / 2, star_size, true, 0, color_item_value, false, bgcolor, 255);
}
} else {
value = item_value_array[i];
gr.GdiDrawText( value, font_item_value, color_item_value, t_x2, t_y, ww - t_x2 - t_x1, t_h, DT_LEFT | DT_SINGLELINE | DT_VCENTER | DT_WORD_ELLIPSIS | DT_NOPREFIX);
t_x3 = t_x2 + gr.CalcTextWidth(value, font_item_value);
tmp = clear_name(item_name_array[i]).replace(/\s/g,"");
gr.GdiDrawText( measure[tmp], font_item_value, color_group_text, t_x3, t_y, ww - t_x3 - t_x1, t_h, DT_LEFT | DT_SINGLELINE | DT_VCENTER | DT_WORD_ELLIPSIS | DT_NOPREFIX);
}
}
}
var metadb;
on_item_focus_change();
function on_playlist_switch() {
on_item_focus_change();
}
function on_playback_new_track() {
on_item_focus_change();
}
function on_playback_dynamic_info_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() {
create_array();
window.Repaint();
}
function Eval(field) {
if (metadb) {
type = metadb.RawPath;
if (type.indexOf("file") > 0){
return fb.TitleFormat("[" + field + "]").EvalWithMetadb(metadb);
} else{
if (selection_mode == 0){
if (field == "$meta(artist)" || field == "%title%"){
return fb.TitleFormat("[" + field + "]").Eval(true);
}
if (field == "%genre%"){
return fb.TitleFormat("[" + field + "]").EvalWithMetadb(metadb);
}
}
return fb.TitleFormat("[" + field + "]").EvalWithMetadb(metadb);
}
}
}
function on_mouse_rbtn_up (x, y){
var _menu = window.CreatePopupMenu();
_menu.AppendMenuItem(MF_ENABLED, 1, "Prefer now playing");
_menu.AppendMenuItem(MF_ENABLED, 2, "Follow selected track");
_menu.CheckMenuRadioItem(1, 2, selection_mode + 1);
_menu.EnableMenuItem(selection_mode + 1, 1);
_menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
_menu.AppendMenuItem(MF_ENABLED, 3, "Group text");
_menu.CheckMenuItem(3, group_text);
_menu.AppendMenuItem(MF_ENABLED, 4, "Tooltip");
_menu.CheckMenuItem(4, window.GetProperty("Tooltip"));
_menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
_menu.AppendMenuItem(MF_ENABLED, 5, "Create txt/xls file");
_menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
_menu.AppendMenuItem(MF_ENABLED, 6, default_dim ? "Default dim" : "Set default dim");
_menu.CheckMenuItem(6, default_dim);
_menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
_menu.AppendMenuItem(MF_ENABLED, 10, "Reload");
_menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
_menu.AppendMenuItem(MF_ENABLED, 20, "Properties");
_menu.AppendMenuItem(MF_ENABLED, 30, "Configure ...");
ret = _menu.TrackPopupMenu(x,y);
switch (ret) {
case 1:
selection_mode = 0;
window.SetProperty("selection_mode", selection_mode);
on_item_focus_change();
break;
case 2:
selection_mode = 1;
window.SetProperty("selection_mode", selection_mode);
on_item_focus_change();
break;
case 3:
window.SetProperty("group text", !group_text);
group_text = window.GetProperty("group text");
break;
case 4:
!window.GetProperty("tooltip") ? window.SetProperty("tooltip", true) : window.SetProperty("tooltip", false);
break;
case 5:
menu_create_file(x,y);
break;
case 6:
if (!default_dim){
default_dim = true;
window.SetProperty("default dim", default_dim);
create_array();
}
break;
case 10:
try {
window.Reload();
} catch(e) {};
break;
case 20:
window.ShowProperties();
break;
case 30:
window.ShowConfigure();
break;
}
_menu.Dispose();
return true;
}
///////////////////////////// Create file
var fso = new ActiveXObject("Scripting.FileSystemObject");
var output_path = fb.ProfilePath + "\\tmp_Properties\\";
function check_folder(n) {
if (!n) return;
try {
if(!fso.FolderExists(n)) {fso.CreateFolder(n)};
} catch(e) {}
}
window.GetProperty("ext",1);
var separator = Array(" ; ","\t");
var tmp_item_name_array = [];
var selected;
var shift = 0;;
var output_array = [];
var pllist_name;
create_tmp_item_name_array();
function create_tmp_item_name_array() {
for (var j = 0; j < tfname.length; j++) {
if (tfname[j].search(/group|%lastfm/g) < 0){
//if (tfname[j].indexOf('group') < 0 || tfname[j].indexOf('%lastfm') < 0){
tmp_item_name_array.push(tfname[j]);
}
}
}
for (var j = 0; j < tmp_item_name_array.length; j++) {
window.GetProperty(j + 1,0);
}
function create_output_array() {
output_array = [];
for (var j = 0; j < tmp_item_name_array.length; j++) {
selected = window.GetProperty(j + 1);
if ( selected == 1 ) {output_array.push(tmp_item_name_array[j])};
}
createTextFile();
}
function createTextFile(){
check_folder(output_path);
count = plman.GetPlaylistSelectedItems(plman.ActivePlaylist).Count;
if (count == 0 || output_array.length == 0) return;
if (window.GetProperty("ext") == 0) {
output_file = output_path + "plist " + pllist_name + ".txt";
} else {
output_file = output_path + "plist " + pllist_name + ".xls";
}
try { file = fso.CreateTextFile( output_file )
} catch(e) { return };
var text_item_name = [];
var string_item_name = "";
for (var j = 0; j < output_array.length; j++) {
text_item_name.push(output_array[j]);
}
string_item_name = text_item_name.join(separator[window.GetProperty("ext")]);
file.WriteLine(string_item_name);
file.WriteLine("");
for (var i = 0; i < count; i++) {
item = plman.GetPlaylistSelectedItems(plman.ActivePlaylist).Item(i);
var text_item_value = [];
var string_item_value = "";
for (var j = 0; j < output_array.length; j++) {
value = fb.TitleFormat("[" + output_array[j] + "]").EvalWithMetadb(item);
tmp = clear_name(output_array[j]).replace(/\s/g,"");
tmp = value && measure[tmp] ? measure[tmp] : "";
text_item_value.push(value + tmp);
string_item_value = text_item_value.join(separator[window.GetProperty("ext")]);
}
try { file.WriteLine(string_item_value);
} catch(e) {};
}
file.Close();
}
function menu_create_file(x, y){
var _menu = window.CreatePopupMenu();
var i = 1;
count = plman.GetPlaylistSelectedItems(plman.ActivePlaylist).Count;
MF_STRING = count == 0 ? MF_GRAYED : MF_ENABLED;
pllist_name = plman.GetPlaylistName(plman.ActivePlaylist);
pllist_name = count == 0 ? "*" : pllist_name.replace(/[\/\:\*\?\"\<\>\|]/g,'');
_menu.AppendMenuItem(MF_STRING, i++, "Create " + pllist_name + (window.GetProperty("ext") == 0 ? ".txt" : ".xls"));
_menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
var lines = 20;
tl = 0 + shift;
bl = tmp_item_name_array.length > lines ? lines + shift : tmp_item_name_array.length;
for (var j = tl; j < bl; j++) {
menuItem = tmp_item_name_array[j].replace(/[%\$\(\)]|info|meta/g,'').replace(/_/g,' ');
_menu.AppendMenuItem(MF_ENABLED, i++, menuItem);
_menu.CheckMenuItem(i-1, window.GetProperty(i - 2 + shift));
}
_menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
_menu.AppendMenuItem(MF_ENABLED, 100, "txt");
_menu.AppendMenuItem(MF_ENABLED, 101, "xls");
_menu.CheckMenuRadioItem(100, 101, 100 + window.GetProperty("ext"));
_menu.EnableMenuItem(100 + window.GetProperty("ext"), 1);
_menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
_menu.AppendMenuItem(MF_ENABLED, 110, "Select all");
_menu.AppendMenuItem(MF_ENABLED, 120, "Clear all");
if (tmp_item_name_array.length > lines) {
_menu.AppendMenuItem(MF_SEPARATOR, 0, 0);
_menu.AppendMenuItem(shift == 0 ? MF_GRAYED : MF_ENABLED, 130, "Up");
_menu.AppendMenuItem(shift + lines >= tmp_item_name_array.length ? MF_GRAYED : MF_ENABLED, 140, "Down");
}
ret = _menu.TrackPopupMenu(x, y - 250);
switch (true) {
case (ret == 1):
create_output_array();
break;
case (ret >= 2 && ret <= tmp_item_name_array.length + 1):
selected = window.GetProperty(ret - 1 + shift);
window.SetProperty(ret - 1 + shift, selected == 0 ? 1 : 0);
menu_create_file(x,y);
break;
case (ret == 100):
window.SetProperty("ext", 0);
menu_create_file(x,y);
break;
case (ret == 101):
window.SetProperty("ext", 1);
menu_create_file(x,y);
break;
case (ret == 110):
for (var j = 1; j < tmp_item_name_array.length + 1; j++) {
window.SetProperty(j, 1);
}
menu_create_file(x,y);
break;
case (ret == 120):
for (var j = 1; j < tmp_item_name_array.length + 1; j++) {
window.SetProperty(j, 0);
}
menu_create_file(x,y);
break;
case (ret == 130):
shift = shift - 1;
menu_create_file(x,y);
break;
case (ret == 140):
shift = shift + 1;
menu_create_file(x,y);
break;
}
_menu.Dispose();
}
///////////////////////////// Draw star
function draw_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 print(msg) {
fb.trace(msg);
}
Вернуться в Секреты foobar2000