Initial community commit
This commit is contained in:
parent
537bcbc862
commit
fc06254474
16440 changed files with 4239995 additions and 2 deletions
113
Src/resources/skins/Winamp Modern/scripts/albumart.m
Normal file
113
Src/resources/skins/Winamp Modern/scripts/albumart.m
Normal file
|
@ -0,0 +1,113 @@
|
|||
#include <lib/std.mi>
|
||||
#include "attribs.m"
|
||||
|
||||
Global AlbumArtLayer waaa;
|
||||
Global Layout aalayout;
|
||||
|
||||
System.onScriptLoaded()
|
||||
{
|
||||
initAttribs();
|
||||
Container albumart = System.getContainer("winamp.albumart");
|
||||
aalayout = albumart.getLayout("normal");
|
||||
waaa = getScriptGroup().findObject(getParam());
|
||||
}
|
||||
|
||||
system.onScriptUnloading ()
|
||||
{
|
||||
if (!aalayout) return;
|
||||
setPrivateInt("Winamp Modern", "Album Art XPos", aalayout.getLeft());
|
||||
setPrivateInt("Winamp Modern", "Album Art YPos", aalayout.getTop());
|
||||
}
|
||||
|
||||
aalayout.onStartup ()
|
||||
{
|
||||
resize(getPrivateInt("Winamp Modern", "Album Art XPos", 0), getPrivateInt("Winamp Modern", "Album Art YPos", 0), getWidth(), getHeight());
|
||||
}
|
||||
|
||||
aalayout.onSetVisible (Boolean onoff)
|
||||
{
|
||||
if (!onoff)
|
||||
{
|
||||
albumart_visible_attrib.setData("0");
|
||||
}
|
||||
else
|
||||
{
|
||||
albumart_visible_attrib.setData("1");
|
||||
}
|
||||
}
|
||||
|
||||
albumart_visible_attrib.onDataChanged ()
|
||||
{
|
||||
if (getData() == "1")
|
||||
{
|
||||
aalayout.show();
|
||||
}
|
||||
else
|
||||
{
|
||||
aalayout.hide();
|
||||
}
|
||||
}
|
||||
|
||||
System.onKeyDown(String key)
|
||||
{
|
||||
if (key == "alt+a")
|
||||
{
|
||||
if (albumart_visible_attrib.getData() == "0")
|
||||
albumart_visible_attrib.setData("1");
|
||||
else
|
||||
albumart_visible_attrib.setData("0");
|
||||
complete;
|
||||
}
|
||||
}
|
||||
|
||||
waaa.onRightButtonDown (int x, int y)
|
||||
{
|
||||
popupmenu p = new popupmenu;
|
||||
|
||||
p.addCommand("Refresh Album Art", 1, 0, 0);
|
||||
String path = getPath(getPlayItemMetaDataString("filename"));
|
||||
if(path != "")
|
||||
{
|
||||
p.addCommand("Open Folder", 2, 0, 0);
|
||||
}
|
||||
|
||||
int result = p.popatmouse();
|
||||
delete p;
|
||||
|
||||
if (result == 1)
|
||||
{
|
||||
waaa.refresh();
|
||||
}
|
||||
else if (result == 2)
|
||||
{
|
||||
if(path != "")
|
||||
{
|
||||
System.navigateUrl(path);
|
||||
}
|
||||
else
|
||||
{
|
||||
String url = getPlayItemMetaDataString("streamurl");
|
||||
if(url != "")
|
||||
{
|
||||
System.navigateUrl(url);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
waaa.onLeftButtonDblClk (int x, int y)
|
||||
{
|
||||
String path = getPath(getPlayItemMetaDataString("filename"));
|
||||
if(path != "")
|
||||
{
|
||||
System.navigateUrl(path);
|
||||
}
|
||||
else
|
||||
{
|
||||
String url = getPlayItemMetaDataString("streamurl");
|
||||
if(url != "")
|
||||
{
|
||||
System.navigateUrl(url);
|
||||
}
|
||||
}
|
||||
}
|
BIN
Src/resources/skins/Winamp Modern/scripts/albumart.maki
Normal file
BIN
Src/resources/skins/Winamp Modern/scripts/albumart.maki
Normal file
Binary file not shown.
319
Src/resources/skins/Winamp Modern/scripts/attribs.m
Normal file
319
Src/resources/skins/Winamp Modern/scripts/attribs.m
Normal file
|
@ -0,0 +1,319 @@
|
|||
#ifndef included
|
||||
#error This script can only be compiled as a #include
|
||||
#endif
|
||||
|
||||
#ifndef __ATTRIBS_M
|
||||
#define __ATTRIBS_M
|
||||
|
||||
#include <lib/config.mi>
|
||||
|
||||
// -----------------------------------------------------------------------------------------------------------------
|
||||
|
||||
// this is the page that maps its items to the options menu, you can add attribs or more pages (submenus)
|
||||
#define CUSTOM_OPTIONSMENU_ITEMS "{1828D28F-78DD-4647-8532-EBA504B8FC04}"
|
||||
|
||||
// this is the page that maps its items to the windows menu (aka View), you can add attribs or more pages (submenus)
|
||||
#define CUSTOM_WINDOWSMENU_ITEMS "{6559CA61-7EB2-4415-A8A9-A2AEEF762B7F}"
|
||||
|
||||
// custom options submenu item page, you can add more, just use guidgen and Config.newItem()
|
||||
#define CUSTOM_PAGE "{26E26319-AECA-4433-B8F1-F4A5BF2A9ED5}"
|
||||
|
||||
// drawer config page
|
||||
#define CUSTOM_PAGE_DRAWER "{C338B30F-2A04-4b10-871F-4E9D52D62806}"
|
||||
|
||||
// menubars config page
|
||||
#define CUSTOM_PAGE_MENUBARS "{12ED320E-6813-45ac-9F8E-78EE5B2B5F6D}"
|
||||
|
||||
// main windowshade config page
|
||||
#define CUSTOM_PAGE_WINDOWSHADE "{58F07E21-AE96-4899-B7BC-3640B40029FB}"
|
||||
|
||||
// vis button config page
|
||||
#define CUSTOM_PAGE_VISCMD "{D70E3ABF-D2FF-4b82-9A70-4B5DF1A5D942}"
|
||||
|
||||
// notifier config page
|
||||
#define CUSTOM_PAGE_NOTIFIER "{1AB968B3-8687-4a35-BA70-FCF6D92FB57F}"
|
||||
|
||||
// songticker config page
|
||||
#define CUSTOM_PAGE_SONGTICKER "{7061FDE0-0E12-11D8-BB41-0050DA442EF3}"
|
||||
|
||||
// non exposed attribs page
|
||||
#define CUSTOM_PAGE_NONEXPOSED "{E9C2D926-53CA-400f-9A4D-85E31755A4CF}"
|
||||
|
||||
|
||||
// -----------------------------------------------------------------------------------------------------------------
|
||||
|
||||
Function initAttribs();
|
||||
|
||||
// -----------------------------------------------------------------------------------------------------------------
|
||||
|
||||
Global ConfigAttribute scrolldrawerattrib;
|
||||
Global ConfigAttribute scrollconfigdrawerattrib;
|
||||
|
||||
Global ConfigAttribute vis_detach_attrib;
|
||||
Global ConfigAttribute video_detach_attrib;
|
||||
|
||||
Global ConfigAttribute drawer_directiontop_attrib;
|
||||
Global ConfigAttribute drawer_directionbottom_attrib;
|
||||
Global ConfigAttribute drawer_directionbypass_attrib;
|
||||
|
||||
Global ConfigAttribute eq_visible_attrib, albumart_visible_attrib;
|
||||
|
||||
Global ConfigAttribute menubar_main_attrib;
|
||||
Global ConfigAttribute menubar_pe_attrib;
|
||||
Global ConfigAttribute menubar_ml_attrib;
|
||||
|
||||
Global ConfigAttribute windowshade_linkall_attrib;
|
||||
Global ConfigAttribute windowshade_linkposition_attrib;
|
||||
Global ConfigAttribute windowshade_linknone_attrib;
|
||||
|
||||
Global ConfigAttribute beatvisualization_attrib;
|
||||
|
||||
Global ConfigAttribute viscmd_config_attrib;
|
||||
Global ConfigAttribute viscmd_menu_attrib;
|
||||
|
||||
Global ConfigAttribute notifier_minimized_attrib;
|
||||
Global ConfigAttribute notifier_windowshade_attrib;
|
||||
Global ConfigAttribute notifier_always_attrib;
|
||||
Global ConfigAttribute notifier_never_attrib;
|
||||
Global ConfigAttribute notifier_fadeintime_attrib;
|
||||
Global ConfigAttribute notifier_fadeouttime_attrib;
|
||||
Global ConfigAttribute notifier_holdtime_attrib;
|
||||
Global ConfigAttribute notifier_disablefullscreen_attrib;
|
||||
//Global ConfigAttribute notifier_opennowplaying_attrib;
|
||||
Global ConfigAttribute notifier_artworkinnotification_attrib;
|
||||
|
||||
Class ConfigAttribute songticker_scrolling_attrib;
|
||||
Global songticker_scrolling_attrib songticker_scrolling_modern_attrib;
|
||||
Global songticker_scrolling_attrib songticker_scrolling_classic_attrib;
|
||||
Global songticker_scrolling_attrib songticker_scrolling_disabled_attrib;
|
||||
|
||||
// -----------------------------------------------------------------------------------------------------------------
|
||||
|
||||
initAttribs() {
|
||||
|
||||
// create the custom cfgpage for this session (if it does exist, it just returns it)
|
||||
ConfigItem custom_page = Config.newItem("Winamp Modern", CUSTOM_PAGE);
|
||||
ConfigItem custom_page_drawer = Config.newItem("Drawers", CUSTOM_PAGE_DRAWER);
|
||||
ConfigItem custom_page_menubars = Config.newItem("Menus", CUSTOM_PAGE_MENUBARS);
|
||||
ConfigItem custom_page_windowshade = Config.newItem("Main Windowshade Mode", CUSTOM_PAGE_WINDOWSHADE);
|
||||
ConfigItem custom_page_viscmd = Config.newItem("Vis Buttons", CUSTOM_PAGE_VISCMD);
|
||||
ConfigItem custom_page_notifier = Config.newItem("Notifications", CUSTOM_PAGE_NOTIFIER);
|
||||
ConfigItem custom_page_songticker = Config.newItem("Songticker", CUSTOM_PAGE_SONGTICKER);
|
||||
|
||||
ConfigItem custom_page_nonexposed = Config.newItem("Hidden", CUSTOM_PAGE_NONEXPOSED);
|
||||
|
||||
// load up the cfgpage in which we'll insert our custom page
|
||||
ConfigItem custom_options_page = Config.getItem(CUSTOM_OPTIONSMENU_ITEMS);
|
||||
ConfigItem custom_windows_page = Config.getItem(CUSTOM_WINDOWSMENU_ITEMS);
|
||||
|
||||
// this creates a submenu for this attribute
|
||||
ConfigAttribute submenuattrib = custom_options_page.newAttribute("Winamp Modern", "");
|
||||
submenuattrib.setData(CUSTOM_PAGE); // discard any default value and point at our custom cfgpage
|
||||
|
||||
ConfigAttribute drawersubmenu = custom_page.newAttribute("Drawers", "");
|
||||
drawersubmenu.setData(CUSTOM_PAGE_DRAWER);
|
||||
|
||||
ConfigAttribute menubarssubmenu = custom_page.newAttribute("Menus", "");
|
||||
menubarssubmenu.setData(CUSTOM_PAGE_MENUBARS);
|
||||
|
||||
ConfigAttribute windowshadesubmenu = custom_page.newAttribute("Main Windowshade Mode", "");
|
||||
windowshadesubmenu.setData(CUSTOM_PAGE_WINDOWSHADE);
|
||||
|
||||
ConfigAttribute viscmdsubmenu = custom_page.newAttribute("Vis Shortcut Button", "");
|
||||
viscmdsubmenu.setData(CUSTOM_PAGE_VISCMD);
|
||||
|
||||
ConfigAttribute notifiersubmenu = custom_page.newAttribute("Notifications", "");
|
||||
notifiersubmenu.setData(CUSTOM_PAGE_NOTIFIER);
|
||||
|
||||
ConfigAttribute songtickersubmenu = custom_page.newAttribute("Songticker", "");
|
||||
songtickersubmenu.setData(CUSTOM_PAGE_SONGTICKER);
|
||||
|
||||
|
||||
scrolldrawerattrib = custom_page_drawer.newAttribute("Animate Video/Vis Drawer (disabled if opacity < 100%)", "0");
|
||||
scrollconfigdrawerattrib = custom_page_drawer.newAttribute("Animate Config Drawer", "0");
|
||||
ConfigAttribute sep = custom_page_drawer.newAttribute("sep1", ""); sep.setData("-");
|
||||
drawer_directiontop_attrib = custom_page_drawer.newAttribute("Open Video/Vis from the top", "0");
|
||||
drawer_directionbottom_attrib = custom_page_drawer.newAttribute("Open Video/Vis from the bottom", "1");
|
||||
drawer_directionbypass_attrib = custom_page_drawer.newAttribute("Bypass setting to keep in screen", "1");
|
||||
if (drawer_directiontop_attrib.getData() == "1") drawer_directiontop_attrib.onDataChanged(); else drawer_directionbottom_attrib.onDataChanged();
|
||||
|
||||
menubar_main_attrib = custom_page_menubars.newAttribute("Show Menus in Main Window", "1");
|
||||
menubar_pe_attrib = custom_page_menubars.newAttribute("Show Menus in Playlist Editor", "1");
|
||||
menubar_ml_attrib = custom_page_menubars.newAttribute("Show Menus in Media Library", "1");
|
||||
|
||||
// create an attribute for each of our options, if the attribute already exists, it is returned
|
||||
sep = custom_page.newAttribute("sep1", ""); sep.setData("-");
|
||||
vis_detach_attrib = custom_page.newAttribute("Detach Vis Window", "0");
|
||||
video_detach_attrib = custom_page.newAttribute("Detach Video Window", "0");
|
||||
eq_visible_attrib = custom_windows_page.newAttribute("Equalizer\tAlt+G", "0");
|
||||
albumart_visible_attrib = custom_windows_page.newAttribute("Album Art\tAlt+A", "1");
|
||||
|
||||
sep = custom_page.newAttribute("sep2", ""); sep.setData("-");
|
||||
beatvisualization_attrib = custom_page.newAttribute("Enable Beat Visualization", "1");
|
||||
|
||||
windowshade_linkall_attrib = custom_page_windowshade.newAttribute("Link Position and Width", "1");
|
||||
windowshade_linkposition_attrib = custom_page_windowshade.newAttribute("Link Position, Unlink Width", "0");
|
||||
windowshade_linknone_attrib = custom_page_windowshade.newAttribute("Unlink Position and Width", "0");
|
||||
|
||||
viscmd_menu_attrib = custom_page_viscmd.newAttribute("Open Context Menu", "1");
|
||||
viscmd_config_attrib = custom_page_viscmd.newAttribute("Open Configuration", "0");
|
||||
|
||||
notifier_always_attrib = custom_page_notifier.newAttribute("Show always", "0");
|
||||
notifier_windowshade_attrib = custom_page_notifier.newAttribute("Show with windowshade and when minimized", "0");
|
||||
notifier_minimized_attrib = custom_page_notifier.newAttribute("Show only when minimized", "0");
|
||||
notifier_never_attrib = custom_page_notifier.newAttribute("Never show", "1");
|
||||
sep = custom_page_notifier.newAttribute("sep1", ""); sep.setData("-");
|
||||
notifier_disablefullscreen_attrib = custom_page_notifier.newAttribute("Disable in fullscreen", "1");
|
||||
sep = custom_page_notifier.newAttribute("sep666", ""); sep.setData("-");
|
||||
//notifier_opennowplaying_attrib = custom_page_notifier.newAttribute("Open Now Playing on Click", "1");
|
||||
sep = custom_page_notifier.newAttribute("sep333", ""); sep.setData("-");
|
||||
notifier_artworkinnotification_attrib = custom_page_notifier.newAttribute("Show Now Playing Artwork", "1");
|
||||
|
||||
notifier_fadeintime_attrib = custom_page_nonexposed.newAttribute("Notifications fade in time", "1000");
|
||||
notifier_fadeouttime_attrib = custom_page_nonexposed.newAttribute("Notifications fade out time", "5000");
|
||||
notifier_holdtime_attrib = custom_page_nonexposed.newAttribute("Notifications display time", "2000");
|
||||
|
||||
songticker_scrolling_disabled_attrib = custom_page_songticker.newAttribute("Disable Songticker scrolling", "0");
|
||||
if (songticker_scrolling_disabled_attrib.getData() == "0") songticker_scrolling_modern_attrib = custom_page_songticker.newAttribute("Modern Songticker scrolling", "1");
|
||||
else songticker_scrolling_modern_attrib = custom_page_songticker.newAttribute("Modern Songticker scrolling", "0");
|
||||
songticker_scrolling_classic_attrib = custom_page_songticker.newAttribute("Classic Songticker scrolling", "0");
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------------------------------------------
|
||||
|
||||
#ifdef MAIN_ATTRIBS_MGR
|
||||
|
||||
Global Int attribs_mychange;
|
||||
|
||||
#define NOOFF if (getData()=="0") { setData("1"); return; }
|
||||
|
||||
drawer_directiontop_attrib.onDataChanged() {
|
||||
if (attribs_mychange) return;
|
||||
NOOFF
|
||||
attribs_mychange = 1;
|
||||
drawer_directionbottom_attrib.setData("0");
|
||||
drawer_directiontop_attrib.setData("1");
|
||||
attribs_mychange = 0;
|
||||
}
|
||||
|
||||
drawer_directionbottom_attrib.onDataChanged() {
|
||||
if (attribs_mychange) return;
|
||||
NOOFF
|
||||
attribs_mychange = 1;
|
||||
drawer_directiontop_attrib.setData("0");
|
||||
drawer_directionbottom_attrib.setData("1");
|
||||
attribs_mychange = 0;
|
||||
}
|
||||
|
||||
windowshade_linkall_attrib.onDataChanged() {
|
||||
if (attribs_mychange) return;
|
||||
NOOFF
|
||||
attribs_mychange = 1;
|
||||
windowshade_linkposition_attrib.setData("0");
|
||||
windowshade_linknone_attrib.setData("0");
|
||||
attribs_mychange = 0;
|
||||
}
|
||||
|
||||
windowshade_linkposition_attrib.onDataChanged() {
|
||||
if (attribs_mychange) return;
|
||||
NOOFF
|
||||
attribs_mychange = 1;
|
||||
windowshade_linkall_attrib.setData("0");
|
||||
windowshade_linknone_attrib.setData("0");
|
||||
attribs_mychange = 0;
|
||||
}
|
||||
|
||||
windowshade_linknone_attrib.onDataChanged() {
|
||||
if (attribs_mychange) return;
|
||||
NOOFF
|
||||
attribs_mychange = 1;
|
||||
windowshade_linkall_attrib.setData("0");
|
||||
windowshade_linkposition_attrib.setData("0");
|
||||
attribs_mychange = 0;
|
||||
}
|
||||
|
||||
viscmd_menu_attrib.onDataChanged() {
|
||||
if (attribs_mychange) return;
|
||||
NOOFF
|
||||
attribs_mychange = 1;
|
||||
viscmd_config_attrib.setData("0");
|
||||
attribs_mychange = 0;
|
||||
updateVisCmd();
|
||||
}
|
||||
|
||||
viscmd_config_attrib.onDataChanged() {
|
||||
if (attribs_mychange) return;
|
||||
NOOFF
|
||||
attribs_mychange = 1;
|
||||
viscmd_menu_attrib.setData("0");
|
||||
attribs_mychange = 0;
|
||||
updateVisCmd();
|
||||
}
|
||||
|
||||
notifier_always_attrib.onDataChanged() {
|
||||
if (attribs_mychange) return;
|
||||
NOOFF
|
||||
attribs_mychange = 1;
|
||||
notifier_never_attrib.setData("0");
|
||||
notifier_windowshade_attrib.setData("0");
|
||||
notifier_minimized_attrib.setData("0");
|
||||
attribs_mychange = 0;
|
||||
}
|
||||
|
||||
notifier_never_attrib.onDataChanged() {
|
||||
if (attribs_mychange) return;
|
||||
NOOFF
|
||||
attribs_mychange = 1;
|
||||
notifier_always_attrib.setData("0");
|
||||
notifier_windowshade_attrib.setData("0");
|
||||
notifier_minimized_attrib.setData("0");
|
||||
attribs_mychange = 0;
|
||||
}
|
||||
|
||||
notifier_minimized_attrib.onDataChanged() {
|
||||
if (attribs_mychange) return;
|
||||
NOOFF
|
||||
attribs_mychange = 1;
|
||||
notifier_never_attrib.setData("0");
|
||||
notifier_windowshade_attrib.setData("0");
|
||||
notifier_always_attrib.setData("0");
|
||||
attribs_mychange = 0;
|
||||
}
|
||||
|
||||
notifier_windowshade_attrib.onDataChanged() {
|
||||
if (attribs_mychange) return;
|
||||
NOOFF
|
||||
attribs_mychange = 1;
|
||||
notifier_never_attrib.setData("0");
|
||||
notifier_always_attrib.setData("0");
|
||||
notifier_minimized_attrib.setData("0");
|
||||
attribs_mychange = 0;
|
||||
}
|
||||
|
||||
songticker_scrolling_modern_attrib.onDataChanged() {
|
||||
if (attribs_mychange) return;
|
||||
NOOFF
|
||||
attribs_mychange = 1;
|
||||
songticker_scrolling_disabled_attrib.setData("0");
|
||||
songticker_scrolling_classic_attrib.setData("0");
|
||||
attribs_mychange = 0;
|
||||
}
|
||||
songticker_scrolling_disabled_attrib.onDataChanged() {
|
||||
if (attribs_mychange) return;
|
||||
NOOFF
|
||||
attribs_mychange = 1;
|
||||
songticker_scrolling_modern_attrib.setData("0");
|
||||
songticker_scrolling_classic_attrib.setData("0");
|
||||
attribs_mychange = 0;
|
||||
}
|
||||
songticker_scrolling_classic_attrib.onDataChanged() {
|
||||
if (attribs_mychange) return;
|
||||
NOOFF
|
||||
attribs_mychange = 1;
|
||||
songticker_scrolling_modern_attrib.setData("0");
|
||||
songticker_scrolling_disabled_attrib.setData("0");
|
||||
attribs_mychange = 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
139
Src/resources/skins/Winamp Modern/scripts/beatvisualization.m
Normal file
139
Src/resources/skins/Winamp Modern/scripts/beatvisualization.m
Normal file
|
@ -0,0 +1,139 @@
|
|||
#include <lib/std.mi>
|
||||
#include "attribs.m"
|
||||
|
||||
Function setObjects();
|
||||
|
||||
Global Group frameGroup,beatdisplay;
|
||||
Global Layer beatOverlay,DisplayRight,DisplayRightOverlay,DisplaySongtickerBG,VisOverlay;
|
||||
Global Timer refreshEQ;
|
||||
Global AnimatedLayer beatbarLeft,beatbarRight;
|
||||
Global int lastBeatLeft,lastBeatRight;
|
||||
Global Button Toggler,Toggler2;
|
||||
Global Int dobeat2;
|
||||
|
||||
System.onScriptLoaded() {
|
||||
initAttribs();
|
||||
frameGroup = getScriptGroup();
|
||||
beatdisplay = frameGroup.findObject("player.normal.display.beatvisualization");
|
||||
beatOverlay = frameGroup.findObject("beatdisplayoverlay");
|
||||
beatbarLeft = frameGroup.findObject("beatleft");
|
||||
beatbarRight = frameGroup.findObject("beatright");
|
||||
|
||||
Toggler = frameGroup.findObject("beatvisualization");
|
||||
Toggler2 = frameGroup.findObject("beatvisualization2");
|
||||
|
||||
DisplayRight = frameGroup.findObject("display.right");
|
||||
DisplayRightOverlay = frameGroup.findObject("display.right.overlay2");
|
||||
DisplaySongtickerBG = frameGroup.findObject("display.st.right");
|
||||
VisOverlay = frameGroup.findObject("visualization.overlay");
|
||||
|
||||
lastBeatLeft = 0;
|
||||
lastBeatRight = 0;
|
||||
|
||||
refreshEQ = new Timer;
|
||||
refreshEQ.setDelay(10);
|
||||
}
|
||||
|
||||
System.onscriptunloading() {
|
||||
delete refreshEQ;
|
||||
}
|
||||
|
||||
setObjects() {
|
||||
int group_width = frameGroup.getWidth();
|
||||
|
||||
if ( group_width % 2 !=0 ) {
|
||||
DisplayRight.setXmlParam("image","player.display.right");
|
||||
DisplayRightOverlay.setXmlParam("image","player.display.right");
|
||||
DisplaySongtickerBG.setXmlParam("image","player.display.songticker.bg.right");
|
||||
VisOverlay.setXmlParam("image","player.visualization.overlay");
|
||||
} else {
|
||||
DisplayRight.setXmlParam("image","player.display.right2");
|
||||
DisplayRightOverlay.setXmlParam("image","player.display.right2");
|
||||
DisplaySongtickerBG.setXmlParam("image","player.display.songticker.bg.right2");
|
||||
VisOverlay.setXmlParam("image","player.visualization.overlay2");
|
||||
}
|
||||
|
||||
if ( group_width > 480 ) {
|
||||
int newXpos = (group_width-60)/2;
|
||||
beatdisplay.setXmlParam("x", IntegerToString(newXpos));
|
||||
beatdisplay.show();
|
||||
|
||||
if ( beatvisualization_attrib.getData()=="1" ) {
|
||||
refreshEQ.stop();
|
||||
refreshEQ.start();
|
||||
} else {
|
||||
refreshEQ.stop();
|
||||
beatbarLeft.gotoframe(0);
|
||||
beatbarRight.gotoframe(0);
|
||||
}
|
||||
} else {
|
||||
beatdisplay.hide();
|
||||
refreshEQ.stop();
|
||||
}
|
||||
}
|
||||
|
||||
frameGroup.onResize(int x, int y, int w, int h) {
|
||||
setObjects();
|
||||
}
|
||||
|
||||
refreshEQ.onTimer() {
|
||||
int beatLeft= System.getLeftVuMeter();
|
||||
int beatRight= System.getRightVuMeter();
|
||||
|
||||
int frameLeft=beatLeft/16;
|
||||
int frameRight=beatRight/16;
|
||||
|
||||
if (frameLeft>14) frameLeft=14;
|
||||
if (frameRight>14) frameRight=14;
|
||||
|
||||
if (frameLeft<lastBeatLeft) {
|
||||
frameLeft=lastBeatLeft-1;
|
||||
if (frameLeft<0) frameLeft=0;
|
||||
}
|
||||
|
||||
if (frameRight<lastBeatRight) {
|
||||
frameRight=lastBeatRight-1;
|
||||
if (frameRight<0) frameRight=0;
|
||||
}
|
||||
|
||||
lastBeatLeft=frameLeft;
|
||||
lastBeatRight=frameRight;
|
||||
|
||||
beatbarLeft.gotoframe(frameLeft);
|
||||
beatbarRight.gotoframe(frameRight);
|
||||
}
|
||||
|
||||
beatvisualization_attrib.onDataChanged() {
|
||||
setObjects();
|
||||
}
|
||||
|
||||
System.onKeyDown(String key) {
|
||||
if (key == "shift+ctrl+alt") {
|
||||
dobeat2 = 1;
|
||||
complete;
|
||||
} else dobeat2 = 0;
|
||||
}
|
||||
|
||||
Toggler.onLeftClick() {
|
||||
if ( beatvisualization_attrib.getData()=="1" ) {
|
||||
beatvisualization_attrib.setData("0");
|
||||
} else {
|
||||
beatvisualization_attrib.setData("1");
|
||||
}
|
||||
}
|
||||
|
||||
Toggler2.onActivate(boolean on) {
|
||||
if (!dobeat2) { Toggler.leftClick(); return; }
|
||||
refreshEQ.stop();
|
||||
|
||||
if (on) {
|
||||
beatbarLeft.setXMLParam("image","player.display.beat.left2");
|
||||
beatbarRight.setXMLParam("image","player.display.beat.right2");
|
||||
beatOverlay.hide();
|
||||
} else {
|
||||
beatbarLeft.setXMLParam("image","player.display.beat.left");
|
||||
beatbarRight.setXMLParam("image","player.display.beat.right");
|
||||
beatOverlay.show();
|
||||
}
|
||||
setObjects();
|
||||
}
|
BIN
Src/resources/skins/Winamp Modern/scripts/beatvisualization.maki
Normal file
BIN
Src/resources/skins/Winamp Modern/scripts/beatvisualization.maki
Normal file
Binary file not shown.
2
Src/resources/skins/Winamp Modern/scripts/buildall.bat
Normal file
2
Src/resources/skins/Winamp Modern/scripts/buildall.bat
Normal file
|
@ -0,0 +1,2 @@
|
|||
for %%a in (*.m) do "H:\Program Files\Nullsoft\sandbox\wasabi\mc.exe" %%a
|
||||
pause
|
280
Src/resources/skins/Winamp Modern/scripts/configtabs.m
Normal file
280
Src/resources/skins/Winamp Modern/scripts/configtabs.m
Normal file
|
@ -0,0 +1,280 @@
|
|||
#include <lib/std.mi>
|
||||
#include "attribs.m"
|
||||
|
||||
function setTabs(int tabstate);
|
||||
function setTabContent(int contentstate);
|
||||
|
||||
function OpenDrawer(int animate);
|
||||
function CloseDrawer(int animate);
|
||||
function updateAttribs();
|
||||
|
||||
function ShowDrawer();
|
||||
function adjustSnapPoints(int DrawerOpen);
|
||||
|
||||
Global Group frameGroup,PlayerMain,VideoVisGroup;
|
||||
Global Group tabs,tEQon,tEQoff,tOPTIONSon,tOPTIONSoff,tCOLORTHEMESon,tCOLORTHEMESoff;
|
||||
Global Group ContentEQ,ContentOPTIONS,ContentCOLORTHEMES;
|
||||
Global Layer mouseLayerEQ,mouseLayerOPTIONS,mouseLayerCOLORTHEMES;
|
||||
Global Button btnClose,btnOpen;
|
||||
Global Group Drawer,DrawerShadow,DrawerContent;
|
||||
Global GuiObject ColorThemes;
|
||||
Global Layout main;
|
||||
Global Int mychange;
|
||||
Global Boolean loaded=0;
|
||||
Global Timer deferred_opendrawer;
|
||||
|
||||
System.onScriptLoaded() {
|
||||
initAttribs();
|
||||
|
||||
frameGroup = getScriptGroup();
|
||||
main = frameGroup.getParentLayout();
|
||||
|
||||
tabs=frameGroup.findObject("config.tabs");
|
||||
tEQon=frameGroup.findObject("config.tab.eq.on");
|
||||
tEQoff=frameGroup.findObject("config.tab.eq.off");
|
||||
tOPTIONSon=frameGroup.findObject("config.tab.options.on");
|
||||
tOPTIONSoff=frameGroup.findObject("config.tab.options.off");
|
||||
tCOLORTHEMESon=frameGroup.findObject("config.tab.colorthemes.on");
|
||||
tCOLORTHEMESoff=frameGroup.findObject("config.tab.colorthemes.off");
|
||||
|
||||
ColorThemes=frameGroup.findObject("colorthemes");
|
||||
PlayerMain=frameGroup.findObject("player.main");
|
||||
VideoVisGroup = frameGroup.findObject("AVSGroup");
|
||||
|
||||
ContentEQ=frameGroup.findObject("player.normal.drawer.eq");
|
||||
ContentOPTIONS=frameGroup.findObject("player.normal.drawer.options");
|
||||
ContentCOLORTHEMES=frameGroup.findObject("player.normal.drawer.colorthemes");
|
||||
|
||||
mouseLayerEQ=frameGroup.findObject("mousetrapTabEQ");
|
||||
mouseLayerOPTIONS=frameGroup.findObject("mousetrapTabOPTIONS");
|
||||
mouseLayerCOLORTHEMES=frameGroup.findObject("mousetrapTabCOLORTHEMES");
|
||||
|
||||
btnClose = frameGroup.findObject("drawer.button.close");
|
||||
btnOpen = frameGroup.findObject("drawer.button.open");
|
||||
drawer = frameGroup.findObject("player.normal.drawer");
|
||||
DrawerShadow = frameGroup.findObject("player.normal.drawer.shadow");
|
||||
DrawerContent = frameGroup.findObject("player.normal.drawer.content");
|
||||
|
||||
int tabEQwidth=tEQon.getWidth();
|
||||
int tabOPTIONSwidth=tOPTIONSon.getWidth();
|
||||
|
||||
int tOPTIONSx=tabEQwidth-3;
|
||||
int tCOLORTHEMESx=tabEQwidth+tabOPTIONSwidth-6;
|
||||
|
||||
tOPTIONSon.setXmlParam("x",integertostring(tOPTIONSx));
|
||||
tOPTIONSoff.setXmlParam("x",integertostring(tOPTIONSx));
|
||||
tCOLORTHEMESoff.setXmlParam("x",integertostring(tCOLORTHEMESx));
|
||||
tCOLORTHEMESon.setXmlParam("x",integertostring(tCOLORTHEMESx));
|
||||
|
||||
mychange = 1;
|
||||
setTabs(getPrivateInt("winamp5", "ConfigTab", 1));
|
||||
mychange = 0;
|
||||
if (getPrivateInt("winamp5", "DrawerOpen", 0)) {
|
||||
OpenDrawer(0);
|
||||
adjustSnapPoints(1);
|
||||
} else {
|
||||
adjustSnapPoints(0);
|
||||
}
|
||||
loaded=1;
|
||||
deferred_opendrawer = new Timer;
|
||||
deferred_opendrawer.setDelay(250);
|
||||
}
|
||||
|
||||
System.onScriptUnloading() {
|
||||
delete deferred_opendrawer;
|
||||
}
|
||||
|
||||
setTabs(int tabstate) {
|
||||
|
||||
tEQon.hide();
|
||||
tOPTIONSon.hide();
|
||||
tCOLORTHEMESon.hide();
|
||||
|
||||
if (tabstate==1) {
|
||||
tEQon.show();
|
||||
}
|
||||
if (tabstate==2) {
|
||||
tOPTIONSon.show();
|
||||
}
|
||||
if (tabstate==3) {
|
||||
tCOLORTHEMESon.show();
|
||||
}
|
||||
|
||||
setTabContent(tabstate);
|
||||
setPrivateInt("winamp5", "ConfigTab", tabstate);
|
||||
updateAttribs();
|
||||
}
|
||||
|
||||
setTabContent(int contentstate) {
|
||||
if (contentstate==1) {
|
||||
ContentEQ.show();
|
||||
ContentOPTIONS.hide();
|
||||
ContentCOLORTHEMES.hide();
|
||||
}
|
||||
if (contentstate==2) {
|
||||
ContentEQ.hide();
|
||||
ContentOPTIONS.show();
|
||||
ContentCOLORTHEMES.hide();
|
||||
}
|
||||
if (contentstate==3) {
|
||||
ContentEQ.hide();
|
||||
ContentOPTIONS.hide();
|
||||
ContentCOLORTHEMES.show();
|
||||
}
|
||||
}
|
||||
|
||||
mouseLayerEQ.onLeftButtonDown(int x, int y) {
|
||||
setTabs(1);
|
||||
}
|
||||
|
||||
mouseLayerOPTIONS.onLeftButtonDown(int x, int y) {
|
||||
setTabs(2);
|
||||
}
|
||||
|
||||
mouseLayerCOLORTHEMES.onLeftButtonDown(int x, int y) {
|
||||
setTabs(3);
|
||||
}
|
||||
|
||||
OpenDrawer(int animate) {
|
||||
btnOpen.hide();
|
||||
btnClose.show();
|
||||
main.beforeRedock();
|
||||
if (animate && scrollconfigdrawerattrib.getData() == "1") {
|
||||
lockUI();
|
||||
drawer.setTargetX(drawer.getGuiX());
|
||||
drawer.setTargetY(-147);
|
||||
drawer.setTargetW(drawer.getGuiW());
|
||||
drawer.setTargetH(drawer.getGuiH());
|
||||
drawer.setTargetSpeed(1);
|
||||
drawer.gotoTarget();
|
||||
} else {
|
||||
drawer.setXMLParam("y","-147");
|
||||
setPrivateInt("winamp5", "DrawerOpen", 1);
|
||||
ColorThemes.show();
|
||||
adjustSnapPoints(1);
|
||||
updateAttribs();
|
||||
main.Redock();
|
||||
}
|
||||
DrawerShadow.show();
|
||||
// main.setXmlParam("minimum_h", "397");
|
||||
}
|
||||
|
||||
closeDrawer(int animate) {
|
||||
main.beforeRedock();
|
||||
// main.setXmlParam("minimum_h", "280");
|
||||
ColorThemes.hide();
|
||||
|
||||
btnClose.hide();
|
||||
btnOpen.show();
|
||||
if (animate && scrollconfigdrawerattrib.getData() == "1") {
|
||||
lockUI();
|
||||
drawer.setTargetX(drawer.getGuiX());
|
||||
drawer.setTargetY(-263);
|
||||
drawer.setTargetW(drawer.getGuiW());
|
||||
drawer.setTargetH(drawer.getGuiH());
|
||||
drawer.setTargetSpeed(1);
|
||||
drawer.gotoTarget();
|
||||
} else {
|
||||
drawer.setXMLParam("y","-263");
|
||||
DrawerShadow.hide();
|
||||
setPrivateInt("winamp5", "DrawerOpen", 0);
|
||||
adjustSnapPoints(0);
|
||||
updateAttribs();
|
||||
main.redock();
|
||||
}
|
||||
}
|
||||
|
||||
btnClose.onLeftClick() {
|
||||
closeDrawer(1);
|
||||
}
|
||||
|
||||
btnOpen.onLeftClick() {
|
||||
openDrawer(1);
|
||||
}
|
||||
|
||||
drawer.onTargetReached() {
|
||||
if (btnClose.isVisible()) {
|
||||
setPrivateInt("winamp5", "DrawerOpen", 1);
|
||||
ColorThemes.show();
|
||||
adjustSnapPoints(1);
|
||||
} else {
|
||||
DrawerShadow.hide();
|
||||
setPrivateInt("winamp5", "DrawerOpen", 0);
|
||||
adjustSnapPoints(0);
|
||||
}
|
||||
updateAttribs();
|
||||
main.redock();
|
||||
unlockUI();
|
||||
}
|
||||
|
||||
ShowDrawer() {
|
||||
drawer.setXmlParam("y", "-147");
|
||||
ColorThemes.show();
|
||||
btnOpen.hide();
|
||||
btnClose.show();
|
||||
DrawerShadow.show();
|
||||
adjustSnapPoints(1);
|
||||
}
|
||||
|
||||
adjustSnapPoints(int DrawerOpen) {
|
||||
int menuHeight=0;
|
||||
if (menubar_main_attrib.getData() == "0") menuHeight=17;
|
||||
if (DrawerOpen) {
|
||||
main.snapAdjust(0,0,0,0+menuHeight);
|
||||
} else {
|
||||
main.snapAdjust(0,0,0,116+menuHeight);
|
||||
}
|
||||
}
|
||||
|
||||
menubar_main_attrib.onDataChanged() {
|
||||
int menuHeight=0;
|
||||
if (getData() == "0") menuHeight=17;
|
||||
main.beforeRedock();
|
||||
int DrawerOpen=getPrivateInt("winamp5", "DrawerOpen", 0);
|
||||
if (DrawerOpen) {
|
||||
main.snapAdjust(0,0,0,0+menuHeight);
|
||||
} else {
|
||||
main.snapAdjust(0,0,0,116+menuHeight);
|
||||
}
|
||||
main.Redock();
|
||||
}
|
||||
|
||||
main.onResize(int x, int y, int w, int h) {
|
||||
int newXpos=w/2-163;
|
||||
DrawerContent.setXmlParam("x",integertostring(newXpos));
|
||||
}
|
||||
|
||||
eq_visible_attrib.onDataChanged() {
|
||||
if (mychange) return;
|
||||
mychange = 1;
|
||||
if (getData() == "1") {
|
||||
main.getContainer().switchToLayout("normal"); // instead of main.show(), or linkwidth wont work
|
||||
deferred_opendrawer.start();
|
||||
} if (getData() == "0") {
|
||||
closeDrawer(1);
|
||||
}
|
||||
mychange = 0;
|
||||
}
|
||||
|
||||
deferred_opendrawer.onTimer() {
|
||||
stop();
|
||||
setTabs(1);
|
||||
if (btnOpen.isVisible()) openDrawer(1);
|
||||
}
|
||||
|
||||
updateAttribs() {
|
||||
if (mychange) return;
|
||||
mychange = 1;
|
||||
if (tabstate == 1 && !btnOpen.isVisible()) eq_visible_attrib.setData("1"); else eq_visible_attrib.setData("0");
|
||||
mychange = 0;
|
||||
}
|
||||
|
||||
System.onKeyDown(String key) {
|
||||
if (key == "alt+g") {
|
||||
if (eq_visible_attrib.getData() == "0")
|
||||
eq_visible_attrib.setData("1");
|
||||
else
|
||||
eq_visible_attrib.setData("0");
|
||||
complete;
|
||||
}
|
||||
}
|
BIN
Src/resources/skins/Winamp Modern/scripts/configtabs.maki
Normal file
BIN
Src/resources/skins/Winamp Modern/scripts/configtabs.maki
Normal file
Binary file not shown.
97
Src/resources/skins/Winamp Modern/scripts/configtarget.m
Normal file
97
Src/resources/skins/Winamp Modern/scripts/configtarget.m
Normal file
|
@ -0,0 +1,97 @@
|
|||
#include <lib/std.mi>
|
||||
|
||||
// ------------------------------------------------------------------------------------
|
||||
Global GuiObject target;
|
||||
Global ComponentBucket buck;
|
||||
// ------------------------------------------------------------------------------------
|
||||
Function turnAllOffExcept(GuiObject except);
|
||||
Function turnOn(GuiObject obj);
|
||||
Function turnOff(GuiObject obj);
|
||||
// ------------------------------------------------------------------------------------
|
||||
|
||||
|
||||
// ------------------------------------------------------------------------------------
|
||||
// init
|
||||
// ------------------------------------------------------------------------------------
|
||||
System.onScriptLoaded() {
|
||||
target = getScriptGroup().findObject("skin.config.target");
|
||||
buck = getScriptGroup().findObject("my.bucket");
|
||||
|
||||
// turn off all
|
||||
GuiObject o = NULL;
|
||||
turnAllOffExcept(o);
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------
|
||||
// save scroller position
|
||||
// ------------------------------------------------------------------------------------
|
||||
System.onScriptUnloading() {
|
||||
if (buck) {
|
||||
setPrivateInt("configmenu", "last_scroll", buck.getScroll());
|
||||
}
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------
|
||||
// turn on last open
|
||||
// ------------------------------------------------------------------------------------
|
||||
buck.onStartup() {
|
||||
setScroll(getPrivateInt("configmenu", "last_scroll", 0));
|
||||
Group g = buck.enumChildren(getPrivateInt("configmenu", "last_page", 0));
|
||||
if (!g) g = buck.enumChildren(0);
|
||||
if (!g) return;
|
||||
ToggleButton btn = g.getObject("btn");
|
||||
if (btn) btn.leftClick();
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------
|
||||
// this is called by the bucket button to switch to a new group
|
||||
// ------------------------------------------------------------------------------------
|
||||
target.onAction(String action, String param, int x, int y, int p1, int p2, GuiObject source) {
|
||||
if (getToken(action,";",0) == "switchto") {
|
||||
String grp = getToken(action, ";", 1);
|
||||
String is_subpage = getToken(action, ";", 2);
|
||||
target.setXmlParam("groupid", grp);
|
||||
|
||||
if (is_subpage!="subpage") turnAllOffExcept(source.getParent()); // getParent because the source is the button itself, the parent is the whole group item in the bucket
|
||||
}
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------
|
||||
// turn off all buttons except for the parameter, also save last_page param based on param item
|
||||
// ------------------------------------------------------------------------------------
|
||||
turnAllOffExcept(GuiObject except) {
|
||||
if (!buck) return;
|
||||
int i=0;
|
||||
// enumerate all inserted groups, turn them off if they're not our exception
|
||||
while (i<buck.getNumChildren()) {
|
||||
GuiObject obj = buck.enumChildren(i);
|
||||
if (obj == except) { // otherwise record last page
|
||||
setPrivateInt("configmenu", "last_page", i);
|
||||
i++;
|
||||
continue;
|
||||
}
|
||||
if (obj == NULL) { break; } // shoundnt happen
|
||||
turnOff(obj);
|
||||
i++;
|
||||
}
|
||||
// turn on the clicked item
|
||||
if (except) turnOn(except);
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------
|
||||
turnOn(GuiObject obj) {
|
||||
Group gobj = obj;
|
||||
|
||||
// otherwise we just need this :
|
||||
ToggleButton tg = gobj.getObject("btn");
|
||||
tg.setActivated(1);
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------------
|
||||
turnOff(GuiObject obj) {
|
||||
Group gobj = obj;
|
||||
|
||||
// otherwise we just need this :
|
||||
ToggleButton tg = gobj.getObject("btn");
|
||||
tg.setActivated(0);
|
||||
}
|
BIN
Src/resources/skins/Winamp Modern/scripts/configtarget.maki
Normal file
BIN
Src/resources/skins/Winamp Modern/scripts/configtarget.maki
Normal file
Binary file not shown.
55
Src/resources/skins/Winamp Modern/scripts/crossfade.m
Normal file
55
Src/resources/skins/Winamp Modern/scripts/crossfade.m
Normal file
|
@ -0,0 +1,55 @@
|
|||
#include <lib/std.mi>
|
||||
|
||||
Global Group frameGroup;
|
||||
Global Slider slidercb;
|
||||
Global Text fadertext;
|
||||
Global Button CFIncrease, CFDecrease;
|
||||
Global ToggleButton Crossfade;
|
||||
Global Layer DisplayOverlay;
|
||||
|
||||
System.onScriptLoaded() {
|
||||
frameGroup = getScriptGroup();
|
||||
slidercb = frameGroup.findObject("sCrossfade");
|
||||
fadertext = frameGroup.findObject("CFDisplay");
|
||||
CFIncrease = frameGroup.findObject("CrossfadeIncrease");
|
||||
CFDecrease = frameGroup.findObject("CrossfadeDecrease");
|
||||
Crossfade = frameGroup.findObject("Crossfade");
|
||||
DisplayOverlay = frameGroup.findObject("crossfade.display.overlay");
|
||||
slidercb.onSetPosition(slidercb.getPosition());
|
||||
|
||||
Crossfade.onToggle(Crossfade.getActivated());
|
||||
}
|
||||
|
||||
slidercb.onSetPosition(int val) {
|
||||
String s = IntegerToString(val);
|
||||
fadertext.setText(s);
|
||||
}
|
||||
|
||||
CFIncrease.onLeftClick() {
|
||||
slidercb.SetPosition(slidercb.getPosition()+1);
|
||||
}
|
||||
|
||||
CFDecrease.onLeftClick() {
|
||||
slidercb.SetPosition(slidercb.getPosition()-1);
|
||||
}
|
||||
|
||||
Crossfade.onToggle(boolean on) {
|
||||
if (!on)
|
||||
{
|
||||
fadertext.setAlpha(150);
|
||||
CFIncrease.setAlpha(150);
|
||||
CFDecrease.setXmlParam("ghost" , "1");
|
||||
CFDecrease.setAlpha(150);
|
||||
CFIncrease.setXmlParam("ghost" , "1");
|
||||
DisplayOverlay.show();
|
||||
}
|
||||
else
|
||||
{
|
||||
fadertext.setAlpha(255);
|
||||
CFIncrease.setAlpha(255);
|
||||
CFDecrease.setAlpha(255);
|
||||
CFIncrease.setXmlParam("ghost" , "0");
|
||||
CFDecrease.setXmlParam("ghost" , "0");
|
||||
DisplayOverlay.hide();
|
||||
}
|
||||
}
|
BIN
Src/resources/skins/Winamp Modern/scripts/crossfade.maki
Normal file
BIN
Src/resources/skins/Winamp Modern/scripts/crossfade.maki
Normal file
Binary file not shown.
120
Src/resources/skins/Winamp Modern/scripts/display.m
Normal file
120
Src/resources/skins/Winamp Modern/scripts/display.m
Normal file
|
@ -0,0 +1,120 @@
|
|||
#include <lib/std.mi>
|
||||
#include "attribs.m"
|
||||
|
||||
Global Group frameGroup;
|
||||
Global Togglebutton ShuffleBtn,RepeatBtn,ShuffleBtn2,RepeatBtn2;
|
||||
Global Timer SongTickerTimer;
|
||||
Global Text InfoTicker;
|
||||
Global GuiObject SongTicker;
|
||||
Global Slider Balance;
|
||||
Global Layout normal;
|
||||
|
||||
function setSongtickerScrolling();
|
||||
|
||||
System.onScriptLoaded() {
|
||||
initAttribs();
|
||||
frameGroup = getScriptGroup();
|
||||
SongTicker = frameGroup.findObject("songticker");
|
||||
InfoTicker = frameGroup.findObject("infoticker");
|
||||
normal = frameGroup.getParentLayout();
|
||||
|
||||
SongTickerTimer = new Timer;
|
||||
SongTickerTimer.setDelay(1000);
|
||||
|
||||
RepeatBtn = frameGroup.findObject("Repeat");
|
||||
ShuffleBtn = frameGroup.findObject("Shuffle");
|
||||
RepeatBtn2 = frameGroup.findObject("RepeatDisplay");
|
||||
ShuffleBtn2 = frameGroup.findObject("ShuffleDisplay");
|
||||
|
||||
Balance = frameGroup.findObject("Balance");
|
||||
setSongtickerScrolling();
|
||||
}
|
||||
|
||||
normal.onAction (String action, String param, Int x, int y, int p1, int p2, GuiObject source)
|
||||
{
|
||||
if (strlower(action) == "showinfo")
|
||||
{
|
||||
SongTicker.hide();
|
||||
SongTickerTimer.start();
|
||||
InfoTicker.setText(param);
|
||||
InfoTicker.show();
|
||||
|
||||
}
|
||||
else if (strlower(action) == "cancelinfo")
|
||||
{
|
||||
SongTickerTimer.onTimer ();
|
||||
}
|
||||
}
|
||||
|
||||
SongTickerTimer.onTimer() {
|
||||
SongTicker.show();
|
||||
InfoTicker.hide();
|
||||
SongTickerTimer.stop();
|
||||
}
|
||||
|
||||
System.onScriptUnloading() {
|
||||
delete SongTickerTimer;
|
||||
}
|
||||
|
||||
Balance.onSetPosition(int newpos)
|
||||
{
|
||||
string t=translate("Balance")+":";
|
||||
if (newpos==127) t+= " " + translate("Center");
|
||||
if (newpos<127) t += " " + integerToString((100-(newpos/127)*100))+"% "+translate("Left");
|
||||
if (newpos>127) t += " " + integerToString(((newpos-127)/127)*100)+"% "+translate("Right");
|
||||
|
||||
SongTickerTimer.start();
|
||||
SongTicker.hide();
|
||||
InfoTicker.show();
|
||||
InfoTicker.setText(t);
|
||||
}
|
||||
|
||||
RepeatBtn.onToggle(boolean on) {
|
||||
SongTickerTimer.start();
|
||||
int v = getCurCfgVal();
|
||||
SongTicker.hide();
|
||||
InfoTicker.show();
|
||||
if (v == 0) InfoTicker.setText("Repeat: OFF");
|
||||
else if (v > 0) InfoTicker.setText("Repeat: ALL");
|
||||
else if (v < 0) InfoTicker.setText("Repeat: TRACK");
|
||||
}
|
||||
|
||||
ShuffleBtn.onToggle(boolean on) {
|
||||
SongTickerTimer.start();
|
||||
SongTicker.hide();
|
||||
InfoTicker.show();
|
||||
if (on) InfoTicker.setText("Playlist Shuffling: ON"); else InfoTicker.setText("Playlist Shuffling: OFF");
|
||||
}
|
||||
|
||||
RepeatBtn2.onToggle(boolean on) {
|
||||
SongTickerTimer.start();
|
||||
int v = getCurCfgVal();
|
||||
SongTicker.hide();
|
||||
InfoTicker.show();
|
||||
if (v == 0) InfoTicker.setText("Repeat: OFF");
|
||||
else if (v > 0) InfoTicker.setText("Repeat: ALL");
|
||||
else if (v < 0) InfoTicker.setText("Repeat: TRACK");
|
||||
}
|
||||
|
||||
ShuffleBtn2.onToggle(boolean on) {
|
||||
SongTickerTimer.start();
|
||||
SongTicker.hide();
|
||||
InfoTicker.show();
|
||||
if (on) InfoTicker.setText("Playlist Shuffling: ON"); else InfoTicker.setText("Playlist Shuffling: OFF");
|
||||
}
|
||||
|
||||
songticker_scrolling_attrib.onDataChanged() {
|
||||
setSongtickerScrolling();
|
||||
}
|
||||
|
||||
setSongtickerScrolling() {
|
||||
if (songticker_scrolling_modern_attrib.getData()=="1") {
|
||||
SongTicker.setXMLParam("ticker","bounce");
|
||||
}
|
||||
else if (songticker_scrolling_classic_attrib.getData()=="1") {
|
||||
SongTicker.setXMLParam("ticker","scroll");
|
||||
}
|
||||
else {
|
||||
SongTicker.setXMLParam("ticker","off");
|
||||
}
|
||||
}
|
BIN
Src/resources/skins/Winamp Modern/scripts/display.maki
Normal file
BIN
Src/resources/skins/Winamp Modern/scripts/display.maki
Normal file
Binary file not shown.
1059
Src/resources/skins/Winamp Modern/scripts/drawer.m
Normal file
1059
Src/resources/skins/Winamp Modern/scripts/drawer.m
Normal file
File diff suppressed because it is too large
Load diff
90
Src/resources/skins/Winamp Modern/scripts/eq.m
Normal file
90
Src/resources/skins/Winamp Modern/scripts/eq.m
Normal file
|
@ -0,0 +1,90 @@
|
|||
#include <lib/std.mi>
|
||||
#include <lib/winampconfig.mi>
|
||||
|
||||
Global Group frameGroup, use;
|
||||
Global Button btnEQp12,btnEQ0,btnEQm12;
|
||||
Global Layer eqBand;
|
||||
Global Boolean manual_set;
|
||||
|
||||
Global Layout normal;
|
||||
|
||||
#define ISOBANDS "31.5 Hz,63 Hz,125 Hz,250 Hz,500 Hz,1 KHz,2 KHz,4 KHz,8 KHz,16 KHz"
|
||||
#define WINAMPBANDS "70 Hz,180 Hz,320 Hz,600 Hz,1 KHz,3 KHz,6 KHz,12 KHz,14 KHz,16 KHz"
|
||||
|
||||
System.onScriptLoaded() {
|
||||
WinampConfigGroup eqwcg = WinampConfig.getGroup("{72409F84-BAF1-4448-8211-D84A30A1591A}");
|
||||
int freqmode = eqwcg.getInt("frequencies"); // returns 0 for classical winamp levels, 1 for ISO levels
|
||||
|
||||
frameGroup = getScriptGroup();
|
||||
normal = frameGroup.getParentLayout();
|
||||
btnEQp12 = frameGroup.findObject("EQ_p12");
|
||||
btnEQ0 = frameGroup.findObject("EQ_0");
|
||||
btnEQm12 = frameGroup.findObject("EQ_m12");
|
||||
eqBand = frameGroup.findObject("equalizer.band.label");
|
||||
|
||||
system.onEqFreqChanged(freqmode);
|
||||
}
|
||||
|
||||
btnEQp12.onLeftClick() {
|
||||
manual_set = 1;
|
||||
for(int i=0; i<10; i++) setEqBand(i, 127);
|
||||
manual_set = 0;
|
||||
}
|
||||
|
||||
btnEQ0.onLeftClick() {
|
||||
manual_set = 1;
|
||||
for(int i=0; i<10; i++) setEqBand(i, 0);
|
||||
manual_set = 0;
|
||||
}
|
||||
|
||||
btnEQm12.onLeftClick() {
|
||||
manual_set = 1;
|
||||
for(int i=0; i<10; i++) setEqBand(i, -127);
|
||||
manual_set = 0;
|
||||
}
|
||||
|
||||
System.onEqFreqChanged (boolean isoonoff)
|
||||
{
|
||||
if (isoonoff == 1)
|
||||
{
|
||||
eqBand.setXmlParam("image", "drawer.eq.label.iso");
|
||||
for(int i=0; i<10; i++) frameGroup.findObject("eq"+integerToString(i+1)).setXmlParam("tooltip", getToken(ISOBANDS,",",i));
|
||||
}
|
||||
else
|
||||
{
|
||||
eqBand.setXmlParam("image", "drawer.eq.label.winamp");
|
||||
for(int i=0; i<10; i++) frameGroup.findObject("eq"+integerToString(i+1)).setXmlParam("tooltip", getToken(WINAMPBANDS,",",i));
|
||||
}
|
||||
}
|
||||
|
||||
system.onEqBandChanged(int band, int value)
|
||||
{
|
||||
if (manual_set) return;
|
||||
String t;
|
||||
Float f = value;
|
||||
f = f / 10.5;
|
||||
WinampConfigGroup eqwcg = WinampConfig.getGroup("{72409F84-BAF1-4448-8211-D84A30A1591A}");
|
||||
if (eqwcg.getInt("frequencies") == 1) {
|
||||
if (f >= 0) t = "EQ: " + translate(getToken(ISOBANDS,",",band)) + ": +" + floattostring(f, 1) + " "+ translate("dB");
|
||||
else t = "EQ: " + translate(getToken(ISOBANDS,",",band)) + ": " + floattostring(f, 1) + " "+ translate("dB");
|
||||
}
|
||||
else {
|
||||
if (f >= 0) t = "EQ: " + translate(getToken(WINAMPBANDS,",",band)) + ": +" + floattostring(f, 1) + " "+ translate("dB");
|
||||
else t = "EQ: " + translate(getToken(WINAMPBANDS,",",band)) + ": " + floattostring(f, 1) + " "+ translate("dB");
|
||||
}
|
||||
|
||||
normal.sendAction("showinfo", t, 0,0,0,0);
|
||||
}
|
||||
|
||||
system.onEqPreampChanged(int value)
|
||||
{
|
||||
slider s = getScriptGroup().findObject("preamp");
|
||||
value = s.getPosition(); // Somehow this function returns a range from [-127;125] with hotpos -3, so we take the slider instead
|
||||
String t = "EQ: " + translate("Preamp:") + " ";
|
||||
Float f = value;
|
||||
f = f / 10.5;
|
||||
if (f >= -3) t += "+"+floattostring(f, 1) + " "+ translate("dB");
|
||||
else t += floattostring(f, 1) + " "+ translate("dB");
|
||||
|
||||
normal.sendAction("showinfo", t, 0,0,0,0);
|
||||
}
|
BIN
Src/resources/skins/Winamp Modern/scripts/eq.maki
Normal file
BIN
Src/resources/skins/Winamp Modern/scripts/eq.maki
Normal file
Binary file not shown.
34
Src/resources/skins/Winamp Modern/scripts/init_Playlist.m
Normal file
34
Src/resources/skins/Winamp Modern/scripts/init_Playlist.m
Normal file
|
@ -0,0 +1,34 @@
|
|||
#ifndef included
|
||||
#error This script can only be compiled as a #include
|
||||
#endif
|
||||
|
||||
#include "gen_pageguids.m"
|
||||
|
||||
|
||||
Function initAttribs_Playlist();
|
||||
|
||||
#define COSTUM_PAGE_PLAYLIST "{0167CFD9-5D35-404a-8F03-80ED5B89DEDF}"
|
||||
|
||||
Global ConfigAttribute playlist_search_attrib;
|
||||
|
||||
initAttribs_Playlist(){
|
||||
initPages();
|
||||
|
||||
ConfigItem custom_page_playlist = addConfigSubMenu(optionsmenu_page, "Playlist", COSTUM_PAGE_PLAYLIST);
|
||||
|
||||
playlist_search_attrib = custom_page_playlist.newAttribute("Show Playlist Search box", "1");
|
||||
//addMenuSeparator(custom_page_autoresize);
|
||||
}
|
||||
|
||||
#ifdef MAIN_ATTRIBS_MGR
|
||||
/*
|
||||
playlist_search_attrib.onDataChanged()
|
||||
{
|
||||
if (attribs_mychange) return;
|
||||
NOOFF
|
||||
attribs_mychange = 1;
|
||||
if (getData() == "1") playlist_search_attrib.setData("0");
|
||||
if (getData() == "0") playlist_search_attrib.setData("1");
|
||||
attribs_mychange = 0;
|
||||
}*/
|
||||
#endif
|
50
Src/resources/skins/Winamp Modern/scripts/mainmenu.m
Normal file
50
Src/resources/skins/Winamp Modern/scripts/mainmenu.m
Normal file
|
@ -0,0 +1,50 @@
|
|||
#include <lib/std.mi>
|
||||
#include "attribs.m"
|
||||
|
||||
System.onScriptLoaded() {
|
||||
initAttribs();
|
||||
menubar_main_attrib.onDataChanged();
|
||||
}
|
||||
|
||||
menubar_main_attrib.onDataChanged() {
|
||||
Group Player = getscriptgroup().findobject("player.content.dummy.group");
|
||||
Group MenuBar = getscriptgroup().findobject("wasabi.menubar");
|
||||
if (getData() == "1") {
|
||||
Player.setXmlParam("y","0");
|
||||
MenuBar.show();
|
||||
} else {
|
||||
Player.setXmlParam("y","-17");
|
||||
MenuBar.hide();
|
||||
}
|
||||
}
|
||||
|
||||
System.onAccelerator(String action, String section, String key) {
|
||||
if (menubar_main_attrib.getData() == "0") return;
|
||||
Layout l = getScriptGroup().getParentLayout();
|
||||
if (!l.isActive()) return;
|
||||
if (action == "MENUHOTKEY_FILE")
|
||||
{
|
||||
getScriptGroup().findObject("File.menu").sendAction("open", "", 0, 0, 0, 0);
|
||||
complete;
|
||||
}
|
||||
if (action == "MENUHOTKEY_PLAY")
|
||||
{
|
||||
getScriptGroup().findObject("Play.menu").sendAction("open", "", 0, 0, 0, 0);
|
||||
complete;
|
||||
}
|
||||
if (action == "MENUHOTKEY_OPTIONS")
|
||||
{
|
||||
getScriptGroup().findObject("Options.menu").sendAction("open", "", 0, 0, 0, 0);
|
||||
complete;
|
||||
}
|
||||
if (action == "MENUHOTKEY_VIEW")
|
||||
{
|
||||
getScriptGroup().findObject("View.menu").sendAction("open", "", 0, 0, 0, 0);
|
||||
complete;
|
||||
}
|
||||
if (action == "MENUHOTKEY_HELP")
|
||||
{
|
||||
getScriptGroup().findObject("Help.menu").sendAction("open", "", 0, 0, 0, 0);
|
||||
complete;
|
||||
}
|
||||
}
|
BIN
Src/resources/skins/Winamp Modern/scripts/mainmenu.maki
Normal file
BIN
Src/resources/skins/Winamp Modern/scripts/mainmenu.maki
Normal file
Binary file not shown.
25
Src/resources/skins/Winamp Modern/scripts/mainmenuoverlay.m
Normal file
25
Src/resources/skins/Winamp Modern/scripts/mainmenuoverlay.m
Normal file
|
@ -0,0 +1,25 @@
|
|||
#include <lib/std.mi>
|
||||
#include "attribs.m"
|
||||
|
||||
Function setOverlay();
|
||||
|
||||
Global Layer VideoVisTextOverlay;
|
||||
|
||||
System.onScriptLoaded() {
|
||||
initAttribs();
|
||||
VideoVisTextOverlay=getScriptGroup().findObject("menubar.right.textoverlay");
|
||||
setOverlay();
|
||||
}
|
||||
|
||||
video_detach_attrib.onDataChanged() {
|
||||
setOverlay();
|
||||
}
|
||||
|
||||
vis_detach_attrib.onDataChanged() {
|
||||
setOverlay();
|
||||
}
|
||||
|
||||
setOverlay() {
|
||||
if (vis_detach_attrib.getData() == "1" && video_detach_attrib.getData() == "1") VideoVisTextOverlay.hide();
|
||||
else VideoVisTextOverlay.show();
|
||||
}
|
BIN
Src/resources/skins/Winamp Modern/scripts/mainmenuoverlay.maki
Normal file
BIN
Src/resources/skins/Winamp Modern/scripts/mainmenuoverlay.maki
Normal file
Binary file not shown.
14
Src/resources/skins/Winamp Modern/scripts/menualign.m
Normal file
14
Src/resources/skins/Winamp Modern/scripts/menualign.m
Normal file
|
@ -0,0 +1,14 @@
|
|||
#include <lib/std.mi>
|
||||
|
||||
System.onScriptLoaded() {
|
||||
group sg = getScriptGroup();
|
||||
string params = getParam();
|
||||
int offset = 0;
|
||||
|
||||
for (int a = 0; getToken(params,",",a) != ""; a++ )
|
||||
{
|
||||
guiobject tmp = sg.getObject(getToken(params,",",a));
|
||||
tmp.setXMLparam("x",integertostring(offset));
|
||||
offset += tmp.getAutoWidth();
|
||||
}
|
||||
}
|
BIN
Src/resources/skins/Winamp Modern/scripts/menualign.maki
Normal file
BIN
Src/resources/skins/Winamp Modern/scripts/menualign.maki
Normal file
Binary file not shown.
50
Src/resources/skins/Winamp Modern/scripts/mlmenu.m
Normal file
50
Src/resources/skins/Winamp Modern/scripts/mlmenu.m
Normal file
|
@ -0,0 +1,50 @@
|
|||
#include <lib/std.mi>
|
||||
#include "attribs.m"
|
||||
|
||||
System.onScriptLoaded() {
|
||||
initAttribs();
|
||||
menubar_ml_attrib.onDataChanged();
|
||||
}
|
||||
|
||||
menubar_ml_attrib.onDataChanged() {
|
||||
Group Player = getscriptgroup().findobject("player.content.ml.dummy.group");
|
||||
Group MenuBar = getscriptgroup().findobject("wasabi.menubar.ml");
|
||||
Layout main = getscriptgroup().getParentLayout();
|
||||
|
||||
main.beforeRedock();
|
||||
if (getData() == "1") {
|
||||
Player.setXmlParam("y","17");
|
||||
MenuBar.show();
|
||||
main.snapAdjust(0,0,0,0);
|
||||
}
|
||||
else {
|
||||
Player.setXmlParam("y","0");
|
||||
MenuBar.hide();
|
||||
main.snapAdjust(0,0,0,17);
|
||||
}
|
||||
main.Redock();
|
||||
}
|
||||
|
||||
System.onAccelerator(String action, String section, String key) {
|
||||
if (menubar_main_attrib.getData() == "0") return;
|
||||
Layout l = getScriptGroup().getParentLayout();
|
||||
if (!l.isActive()) return;
|
||||
|
||||
// we use the general accelerators otherwise use specific ones
|
||||
// will allow the skin to cope with variations in localisations
|
||||
if (action == "MENUHOTKEY_FILE" || action == "ML_MENUHOTKEY_FILE")
|
||||
{
|
||||
getScriptGroup().findObject("ML_File.menu").sendAction("open", "", 0, 0, 0, 0);
|
||||
complete;
|
||||
}
|
||||
if (action == "MENUHOTKEY_VIEW" || action == "ML_MENUHOTKEY_VIEW")
|
||||
{
|
||||
getScriptGroup().findObject("ML_View.menu").sendAction("open", "", 0, 0, 0, 0);
|
||||
complete;
|
||||
}
|
||||
if (action == "MENUHOTKEY_HELP" || action == "ML_MENUHOTKEY_HELP")
|
||||
{
|
||||
getScriptGroup().findObject("ML_Help.menu").sendAction("open", "", 0, 0, 0, 0);
|
||||
complete;
|
||||
}
|
||||
}
|
BIN
Src/resources/skins/Winamp Modern/scripts/mlmenu.maki
Normal file
BIN
Src/resources/skins/Winamp Modern/scripts/mlmenu.maki
Normal file
Binary file not shown.
125
Src/resources/skins/Winamp Modern/scripts/mute.m
Normal file
125
Src/resources/skins/Winamp Modern/scripts/mute.m
Normal file
|
@ -0,0 +1,125 @@
|
|||
#include <lib/std.mi>
|
||||
|
||||
Function updateVolume(int v);
|
||||
|
||||
Global Group frameGroup;
|
||||
Global Togglebutton MuteBtn,MuteBtnShade;
|
||||
Global Timer SongTickerTimer;
|
||||
Global Text InfoTicker;
|
||||
Global GuiObject SongTicker;
|
||||
Global Float VolumeLevel;
|
||||
Global Boolean Muted,BtnPressed;
|
||||
Global Layer volumebar;
|
||||
Global Timer callback;
|
||||
|
||||
System.onScriptLoaded() {
|
||||
Muted = getPrivateInt("winamp5", "muted", 0);
|
||||
VolumeLevel = getPrivateInt("winamp5", "old_volume", 0);
|
||||
frameGroup = getScriptGroup();
|
||||
|
||||
MuteBtn = frameGroup.findObject("mute");
|
||||
MuteBtn.setActivated(Muted);
|
||||
|
||||
callback = new Timer; callback.setDelay(5); callback.start();
|
||||
SongTicker = frameGroup.findObject("songticker");
|
||||
InfoTicker = frameGroup.findObject("infoticker");
|
||||
|
||||
volumebar = frameGroup.findObject("volumebar");
|
||||
volumebar.setXmlParam("w",integertostring( (system.getVolume()/255) *70 + 5));
|
||||
|
||||
SongTickerTimer = new Timer;
|
||||
SongTickerTimer.setDelay(1000);
|
||||
if (Muted) {
|
||||
SongTickerTimer.start();
|
||||
SongTicker.hide();
|
||||
InfoTicker.show();
|
||||
InfoTicker.setText("Mute ON");
|
||||
}
|
||||
BtnPressed = 0;
|
||||
}
|
||||
|
||||
System.onScriptUnloading() {
|
||||
setPrivateInt("winamp5", "muted", Muted);
|
||||
setPrivateInt("winamp5", "old_volume", VolumeLevel);
|
||||
delete callback;
|
||||
}
|
||||
|
||||
callback.onTimer() {
|
||||
MuteBtnShade = getcontainer("main").getlayout("shade").findObject("shademute");
|
||||
if (MuteBtnShade != NULL) {
|
||||
MuteBtnShade.setActivated(Muted);
|
||||
stop();
|
||||
}
|
||||
}
|
||||
|
||||
SongTickerTimer.onTimer() {
|
||||
SongTicker.show();
|
||||
InfoTicker.hide();
|
||||
SongTickerTimer.stop();
|
||||
}
|
||||
|
||||
MuteBtn.onLeftClick() {
|
||||
BtnPressed = 1;
|
||||
if (!Muted) {
|
||||
VolumeLevel = System.getVolume();
|
||||
System.setVolume(0);
|
||||
Muted = 1;
|
||||
SongTickerTimer.start();
|
||||
SongTicker.hide();
|
||||
InfoTicker.show();
|
||||
InfoTicker.setText("Mute ON");
|
||||
MuteBtnShade.setActivated(1);
|
||||
} else {
|
||||
System.setVolume(VolumeLevel);
|
||||
Muted = 0;
|
||||
SongTickerTimer.start();
|
||||
SongTicker.hide();
|
||||
InfoTicker.show();
|
||||
InfoTicker.setText("Mute OFF");
|
||||
MuteBtnShade.setActivated(0);
|
||||
}
|
||||
}
|
||||
|
||||
MuteBtnShade.onLeftClick() {
|
||||
BtnPressed = 1;
|
||||
if (!Muted) {
|
||||
VolumeLevel = System.getVolume();
|
||||
System.setVolume(0);
|
||||
Muted = 1;
|
||||
SongTickerTimer.start();
|
||||
SongTicker.hide();
|
||||
InfoTicker.show();
|
||||
InfoTicker.setText("Mute ON");
|
||||
MuteBtn.setActivated(1);
|
||||
} else {
|
||||
System.setVolume(VolumeLevel);
|
||||
Muted = 0;
|
||||
SongTickerTimer.start();
|
||||
SongTicker.hide();
|
||||
InfoTicker.show();
|
||||
InfoTicker.setText("Mute OFF");
|
||||
MuteBtn.setActivated(0);
|
||||
}
|
||||
}
|
||||
|
||||
System.onScriptUnloading() {
|
||||
delete SongTickerTimer;
|
||||
}
|
||||
|
||||
System.onvolumechanged(int newvol)
|
||||
{
|
||||
volumebar.setXmlParam("w",integertostring( (newvol/255) *70 + 5));
|
||||
if (!BtnPressed) {
|
||||
SongTickerTimer.start();
|
||||
SongTicker.hide();
|
||||
InfoTicker.show();
|
||||
InfoTicker.setText(translate("Volume") + ": " + integerToString(newvol/2.55) + "%");
|
||||
|
||||
if (Muted) {
|
||||
MuteBtn.setActivated(0);
|
||||
MuteBtnShade.setActivated(0);
|
||||
Muted = 0;
|
||||
}
|
||||
}
|
||||
BtnPressed = 0;
|
||||
}
|
BIN
Src/resources/skins/Winamp Modern/scripts/mute.maki
Normal file
BIN
Src/resources/skins/Winamp Modern/scripts/mute.maki
Normal file
Binary file not shown.
Binary file not shown.
615
Src/resources/skins/Winamp Modern/scripts/notifier.m
Normal file
615
Src/resources/skins/Winamp Modern/scripts/notifier.m
Normal file
|
@ -0,0 +1,615 @@
|
|||
#include <lib/std.mi>
|
||||
#include "attribs.m"
|
||||
|
||||
Function reset();
|
||||
Function createNotifier(boolean cancel);
|
||||
Function showNotifier(Int w);
|
||||
Function onNext();
|
||||
function cancelAnimation();
|
||||
|
||||
Function Int fillNextTrackInfo(String corneroverride);
|
||||
Function Int fillCustomInfo(String customstring);
|
||||
Function prepareAlbumArtNotifier();
|
||||
|
||||
Function checkPref(int bypassfs);
|
||||
|
||||
Function String getArtist();
|
||||
|
||||
Function onAlbumArt(Boolean success);
|
||||
|
||||
Global Container notifier_container;
|
||||
Global Layout notifier_layout;
|
||||
Global Timer notifier_timer;
|
||||
Global String last_autotitle, cur_status;
|
||||
|
||||
Global AlbumArtLayer cover;
|
||||
Global boolean handleAACalback = false;
|
||||
|
||||
Global Boolean triggerBug; //BUGFIX remove this
|
||||
Global Timer fallbackTempFix; //BUGFIX remove this
|
||||
|
||||
Global Boolean b_tohide = 0;
|
||||
Global int width = 0;
|
||||
Global int left = 0;
|
||||
|
||||
#define WEBCOVER_SHOUTCAST "winamp.cover.shoutcast"
|
||||
#define FORCE_BUG_MODE
|
||||
|
||||
// ------------------------------------------------------------------------------
|
||||
// init
|
||||
// ------------------------------------------------------------------------------
|
||||
System.onScriptLoaded() {
|
||||
initAttribs();
|
||||
notifier_timer = new Timer;
|
||||
fallbackTempFix = new Timer; //BUGFIX remove this
|
||||
fallbackTempFix.setDelay(3000); //BUGFIX remove this / Time that onAlbumArtLoaded have to execute before bug mode is ON
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------
|
||||
// shutdown
|
||||
// ------------------------------------------------------------------------------
|
||||
System.onScriptUnloading() {
|
||||
delete notifier_timer;
|
||||
delete fallbackTempFix; //BUGFIX remove this
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------
|
||||
// called by the system when the global hotkey for notification is pressed
|
||||
// ------------------------------------------------------------------------------
|
||||
System.onShowNotification() {
|
||||
//if (checkPref(1)) return; --mp: if we push the hotkey, we want to show the notifier, no matter what the pref settings are.
|
||||
createNotifier(false);
|
||||
if (getStatus() == STATUS_PLAYING) cur_status = "Playing";
|
||||
if (getStatus() == STATUS_PAUSED) cur_status = "Playback Paused";
|
||||
if (getStatus() == STATUS_STOPPED) cur_status = "Playback Stopped";
|
||||
prepareAlbumArtNotifier();
|
||||
complete; // prevents other scripts from getting the message
|
||||
return 1; // tells anybody else that might watch the returned value that, yes, we implemented that
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------
|
||||
// called by the system when the title for the playing item changes, this could be the result of the player
|
||||
// going to the next track, or of an update in the track title
|
||||
// ------------------------------------------------------------------------------
|
||||
System.onTitleChange(String newtitle) {
|
||||
if (last_autotitle == newtitle) return;
|
||||
if (StrLeft(newtitle, 1) == "[") {
|
||||
if (StrLeft(newtitle, 7) == "[Buffer" ||
|
||||
StrLeft(newtitle, 4) == "[ICY") return;
|
||||
}
|
||||
last_autotitle = newtitle;
|
||||
onNext();
|
||||
|
||||
fallbackTempFix.stop(); //BUGFIX remove later
|
||||
fallbackTempFix.start(); //BUGFIX remove later
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------
|
||||
// called by the system when the user clicks the next button
|
||||
// ------------------------------------------------------------------------------
|
||||
onNext() {
|
||||
if (checkPref(0)) return;
|
||||
createNotifier(false);
|
||||
cur_status = "";
|
||||
prepareAlbumArtNotifier();
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------
|
||||
// called by the system when the user clicks the play button
|
||||
// ------------------------------------------------------------------------------
|
||||
System.onPlay() {
|
||||
if (checkPref(0)) return;
|
||||
createNotifier(false);
|
||||
cur_status = "Playing";
|
||||
prepareAlbumArtNotifier();
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------
|
||||
// called by the system when the user clicks the pause button
|
||||
// ------------------------------------------------------------------------------
|
||||
System.onPause() {
|
||||
if (checkPref(0)) return;
|
||||
DebugString("onPause",9);
|
||||
createNotifier(true);
|
||||
showNotifier(fillCustomInfo("Playback Paused"));
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------
|
||||
// called by the system when the user clicks the pause button again
|
||||
// ------------------------------------------------------------------------------
|
||||
System.onResume() {
|
||||
if (checkPref(0)) return;
|
||||
DebugString("onResume",9);
|
||||
createNotifier(false);
|
||||
cur_status = "Resuming Playback";
|
||||
prepareAlbumArtNotifier();
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------
|
||||
// called by the system when the user clicks the play button
|
||||
// ------------------------------------------------------------------------------
|
||||
System.onStop() {
|
||||
if (checkPref(0)) return;
|
||||
createNotifier(true);
|
||||
showNotifier(fillCustomInfo("End of Playback"));
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------
|
||||
// checks if we should display anything
|
||||
// ------------------------------------------------------------------------------
|
||||
Int checkPref(int bypassfs) {
|
||||
if (!bypassfs && notifier_disablefullscreen_attrib.getData() == "1" && isVideoFullscreen()) return 1;
|
||||
if (notifier_never_attrib.getData() == "1") return 1;
|
||||
if (notifier_minimized_attrib.getData() == "1" && !isMinimized()) return 1;
|
||||
if (notifier_windowshade_attrib.getData() == "1") {
|
||||
if (isMinimized()) return 0;
|
||||
Container c = getContainer("main");
|
||||
if (!c) return 1;
|
||||
Layout l = c.getCurLayout();
|
||||
if (!l) return 1;
|
||||
if (l.getId() != "shade") return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------
|
||||
// fade in/out completed
|
||||
// ------------------------------------------------------------------------------
|
||||
notifier_layout.onTargetReached() {
|
||||
int a = notifier_layout.getAlpha();
|
||||
if (a == 255) {
|
||||
notifier_timer.setDelay(StringToInteger(notifier_holdtime_attrib.getData()));
|
||||
notifier_timer.start();
|
||||
}
|
||||
else if (a == 0) {
|
||||
reset();
|
||||
}
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------
|
||||
// hold time elapsed
|
||||
// ------------------------------------------------------------------------------
|
||||
notifier_timer.onTimer() {
|
||||
stop();
|
||||
if (notifier_layout.isTransparencySafe()) {
|
||||
notifier_layout.setTargetA(0);
|
||||
notifier_layout.setTargetSpeed(StringToInteger(notifier_fadeouttime_attrib.getData()) / 1000);
|
||||
notifier_layout.gotoTarget();
|
||||
} else {
|
||||
reset();
|
||||
}
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------
|
||||
// when notifier is clicked, bring back the app from minimized state if its minimized and focus it
|
||||
// ------------------------------------------------------------------------------
|
||||
notifier_layout.onLeftButtonDown(int x, int y) {
|
||||
cancelAnimation();
|
||||
|
||||
restoreApplication();
|
||||
activateApplication();
|
||||
/*if (notifier_opennowplaying_attrib.getData() == "1")
|
||||
{
|
||||
String artist = getArtist();
|
||||
if (artist == "") return;
|
||||
System.navigateUrlBrowser("http://client.winamp.com/nowplaying/artist/?icid=notifiermodern&artistName=" + artist);
|
||||
}*/
|
||||
|
||||
reset();
|
||||
}
|
||||
|
||||
notifier_layout.onRightButtonUp(int x, int y) {
|
||||
cancelAnimation();
|
||||
reset();
|
||||
complete;
|
||||
return;
|
||||
}
|
||||
|
||||
//TODO merge w/ code below
|
||||
String getArtist ()
|
||||
{
|
||||
String artist = getPlayItemMetaDataString("artist");
|
||||
if (artist == "") artist = getPlayItemMetaDataString("uvox/artist");
|
||||
if (artist == "") artist = getPlayItemMetaDataString("cbs/artist");
|
||||
if (artist == "") artist = getPlayItemMetaDataString("streamtitle");
|
||||
if (artist == "") artist = getPlayItemDisplayTitle();
|
||||
|
||||
return artist;
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------
|
||||
// close the notifier window, destroys the container automatically because it's dynamic
|
||||
// ------------------------------------------------------------------------------
|
||||
reset() {
|
||||
notifier_container.close();
|
||||
notifier_container = NULL;
|
||||
notifier_layout = NULL;
|
||||
handleAACalback = FALSE;
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------
|
||||
createNotifier(boolean cancel) {
|
||||
if (notifier_container == NULL) {
|
||||
notifier_container = newDynamicContainer("notifier");
|
||||
if (!notifier_container) return; // reinstall duh!
|
||||
if (isDesktopAlphaAvailable())
|
||||
notifier_layout = notifier_container.getLayout("desktopalpha");
|
||||
else
|
||||
notifier_layout = notifier_container.getLayout("normal");
|
||||
if (!notifier_layout) return; // reinstall twice, man
|
||||
} else if (cancel) {
|
||||
cancelAnimation();
|
||||
}
|
||||
}
|
||||
|
||||
cancelAnimation()
|
||||
{
|
||||
notifier_layout.cancelTarget();
|
||||
notifier_timer.stop();
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------
|
||||
showNotifier(int w) {
|
||||
w = w + 32;
|
||||
|
||||
Layout m = getContainer("main").getCurLayout();
|
||||
int x = left = getViewportWidthFromGuiObject(m) + getViewportLeftFromGuiObject(m) - w - 2;
|
||||
int y = getViewportHeightFromGuiObject(m) + getViewportTopFromGuiObject(m) - 80 - 2;
|
||||
|
||||
// show if not there or if already shown then lets resize on the fly (bento style)
|
||||
if (!notifier_layout.isVisible()) {
|
||||
notifier_layout.resize(x, y, w, 80);
|
||||
}
|
||||
else {
|
||||
notifier_layout.resize(notifier_layout.getguiX(), y, notifier_layout.getGuiW(), 80);
|
||||
}
|
||||
|
||||
if (notifier_layout.isTransparencySafe()) {
|
||||
notifier_layout.show();
|
||||
notifier_layout.setTargetA(255);
|
||||
notifier_layout.setTargetX(x);
|
||||
notifier_layout.setTargetY(y);
|
||||
notifier_layout.setTargetW(w);
|
||||
notifier_layout.setTargetH(80);
|
||||
notifier_layout.setTargetSpeed(StringToInteger(notifier_fadeintime_attrib.getData()) / 1000);
|
||||
notifier_layout.gotoTarget();
|
||||
} else {
|
||||
notifier_layout.setAlpha(255);
|
||||
notifier_layout.show();
|
||||
notifier_timer.setDelay(StringToInteger(notifier_holdtime_attrib.getData()));
|
||||
notifier_timer.start();
|
||||
}
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------
|
||||
|
||||
prepareAlbumArtNotifier()
|
||||
{
|
||||
if (!notifier_layout) return;
|
||||
Group g_albumart = notifier_layout.findObject("notifier.albumart");
|
||||
|
||||
DebugString("prepareAlbumArtNotifier: handleAACalback="+integerToString(handleAACalback), 9);
|
||||
if (g_albumart)
|
||||
{
|
||||
cover = g_albumart.findObject("notifier.cover");
|
||||
DebugString("prepareAlbumArtNotifier: cover.isLoading="+integerToString(cover.isLoading()), 9);
|
||||
DebugString("prepareAlbumArtNotifier: cover.isInvalid="+integerToString(cover.isInvalid()), 9);
|
||||
handleAACalback = true;
|
||||
cover.refresh();
|
||||
}
|
||||
}
|
||||
|
||||
cover.onAlbumArtLoaded(boolean success)
|
||||
{
|
||||
/*
|
||||
Created a seperate function for the code that was here because for some reason I couldn't force this
|
||||
event (from the fallbackTempFix.onTimer) with cover.onAlbumArtLoaded(success) after the Winamp bug appears.
|
||||
Weird, yes.
|
||||
*/
|
||||
FORCE_BUG_MODE onAlbumArt(success);
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------
|
||||
Int fillNextTrackInfo(String corneroverride) {
|
||||
Int maxv = 0;
|
||||
Int stream = 0;
|
||||
|
||||
if (!notifier_layout) return 0;
|
||||
|
||||
Group g_text = notifier_layout.findObject("notifier.text");
|
||||
Group g_albumart = notifier_layout.findObject("notifier.albumart");
|
||||
|
||||
Text plentry = g_text.findObject("plentry");
|
||||
Text nexttrack = g_text.findObject("nexttrack");
|
||||
Text _title = g_text.findObject("title");
|
||||
Text album = g_text.findObject("album");
|
||||
Text artist = g_text.findObject("artist");
|
||||
Text endofplayback = notifier_layout.findObject("endofplayback");
|
||||
|
||||
DebugString("got callback for " + getPlayItemString(), 0);
|
||||
|
||||
// Get Stream Name - if no stream returns ""
|
||||
string s = getPlayItemMetaDataString("streamname");
|
||||
string stype = getPlayItemMetaDataString("streamtype"); //"streamtype" will return "2" for SHOUTcast and "5" for SHOUTcast 2
|
||||
if (stype == "2" || stype == "5") stream = 1;
|
||||
|
||||
if (endofplayback) endofplayback.hide();
|
||||
|
||||
if (plentry)
|
||||
{
|
||||
plentry.setText(integerToString(getPlaylistIndex()+1)+translate(" of ")+integerToString(getPlaylistLength()));
|
||||
plentry.show();
|
||||
}
|
||||
if (nexttrack) {
|
||||
if (corneroverride == "") {
|
||||
if (!stream) {
|
||||
if (!isVideo())
|
||||
{
|
||||
nexttrack.setText("New track");
|
||||
}
|
||||
else
|
||||
{
|
||||
nexttrack.setText("New video");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
nexttrack.setText("On air");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
nexttrack.setText(corneroverride);
|
||||
}
|
||||
nexttrack.show();
|
||||
}
|
||||
|
||||
string set_artist = "";
|
||||
string set = "";
|
||||
if (_title) {
|
||||
String str;
|
||||
if (!stream)
|
||||
{
|
||||
_title.setXmlParam("ticker", "0");
|
||||
_title.setXmlParam("display", "");
|
||||
|
||||
str = getPlayitemMetaDataString("title");
|
||||
if (str == "") str = getPlayitemDisplayTitle();
|
||||
String l = getPlayItemMetaDataString("length");
|
||||
if (l != "") {
|
||||
str += " (" + integerToTime(stringtointeger(l)) + ")";
|
||||
}
|
||||
_title.setText(str);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (str = getPlayItemMetaDataString("streamtitle") != "")
|
||||
{
|
||||
int v = strsearch(str, " - "); // We divide the string by a " - " sublimiter - no luck for old / wrong tagged stations
|
||||
if (v > 0) {
|
||||
set_artist = strleft (str, v); // Store artist
|
||||
string str = strright (str, strlen(str) - 3 - v);
|
||||
_title.setText(str);
|
||||
}
|
||||
else
|
||||
{
|
||||
_title.setXmlParam("ticker", "1"); // These titles can be _very_ long
|
||||
_title.setText(str);
|
||||
}
|
||||
} else
|
||||
{
|
||||
_title.setXmlParam("ticker", "1");
|
||||
_title.setXmlParam("display", "songtitle");
|
||||
_title.setText("");
|
||||
}
|
||||
}
|
||||
_title.show();
|
||||
}
|
||||
|
||||
if (artist) {
|
||||
if (!stream) {
|
||||
if (isVideo())
|
||||
{
|
||||
artist.setText("");
|
||||
}
|
||||
else
|
||||
{
|
||||
artist.setText(getPlayitemMetaDataString("artist"));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Perhaps we've stored the artist before?
|
||||
if (set_artist != "")
|
||||
{
|
||||
artist.setText(set_artist);
|
||||
}
|
||||
// Then display the station name
|
||||
else if (s != "")
|
||||
{
|
||||
artist.setText(s);
|
||||
}
|
||||
// So, we've had no luck - just display a static text :(
|
||||
else
|
||||
{
|
||||
if (isVideo())
|
||||
{
|
||||
artist.setText("Internet TV");
|
||||
}
|
||||
else
|
||||
{
|
||||
artist.setText("Internet Radio");
|
||||
}
|
||||
}
|
||||
}
|
||||
artist.show();
|
||||
}
|
||||
|
||||
if (album) {
|
||||
String str;
|
||||
if (!stream && !isVideo()) {
|
||||
album.setXmlParam("display", "");
|
||||
str = getPlayitemMetaDataString("album");
|
||||
String l = getPlayitemMetaDataString("track");
|
||||
if (l != "" && l != "-1") str += " (" + translate("Track ") + l + ")";
|
||||
album.setText(str);
|
||||
}
|
||||
else
|
||||
{
|
||||
album.setXmlParam("display", "");
|
||||
// we have divided the songname - let's display the station name
|
||||
if (set_artist != "" && s != "")
|
||||
{
|
||||
album.setText(s);
|
||||
}
|
||||
// no luck either...
|
||||
else
|
||||
{
|
||||
album.setText("");
|
||||
album.setXmlParam("display", "songinfo_localise");
|
||||
}
|
||||
}
|
||||
album.show();
|
||||
}
|
||||
|
||||
// Album Art Stuff
|
||||
|
||||
Layer webcover;
|
||||
if (g_albumart)
|
||||
{
|
||||
cover = g_albumart.findObject("notifier.cover");
|
||||
webcover = g_albumart.findObject("notifier.webcover");
|
||||
}
|
||||
|
||||
Boolean showAlbumArt = FALSE;
|
||||
|
||||
if (cover != NULL && webcover != NULL && notifier_artworkinnotification_attrib.getData() == "1")
|
||||
{
|
||||
if (stream)
|
||||
{
|
||||
if(stype == "2" || stype == "5" && cover.isInvalid())
|
||||
{
|
||||
webcover.setXMLParam("image", WEBCOVER_SHOUTCAST);
|
||||
cover.hide();
|
||||
webcover.show();
|
||||
showAlbumArt = TRUE;
|
||||
}
|
||||
else if(stype == "5" && !cover.isInvalid())
|
||||
{
|
||||
webcover.hide();
|
||||
cover.show();
|
||||
showAlbumArt = TRUE;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (cover.isInvalid()) // Check if the album art obj shows a pic
|
||||
{
|
||||
showAlbumArt = FALSE;
|
||||
}
|
||||
else
|
||||
{
|
||||
webcover.hide();
|
||||
cover.show();
|
||||
showAlbumArt = TRUE;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (showAlbumArt)
|
||||
{
|
||||
if (g_albumart) g_albumart.show();
|
||||
if (g_text) g_text.setXmlParam("x", "75");
|
||||
if (g_text) g_text.setXmlParam("w", "-95");
|
||||
}
|
||||
else
|
||||
{
|
||||
if (g_albumart) g_albumart.hide();
|
||||
if (g_text) g_text.setXmlParam("x", "15");
|
||||
if (g_text) g_text.setXmlParam("w", "-35");
|
||||
}
|
||||
|
||||
if (g_text) g_text.show();
|
||||
|
||||
maxv = artist.getAutoWidth();
|
||||
if (maxv < album.getAutoWidth()) maxv = album.getAutoWidth();
|
||||
if (maxv < _title.getAutoWidth()) maxv = _title.getAutoWidth();
|
||||
if (maxv < (nexttrack.getAutoWidth() + plentry.getAutoWidth() - 5) ) maxv = nexttrack.getAutoWidth() + plentry.getAutoWidth() - 5;
|
||||
if (maxv < 128) maxv = 128;
|
||||
Layout m = getContainer("main").getCurLayout();
|
||||
if (maxv > getViewportWidthFromGuiObject(m)/4) maxv = getViewportWidthFromGuiObject(m)/4;
|
||||
|
||||
width = maxv;
|
||||
|
||||
return maxv + ( showAlbumArt * 91 );
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------------------
|
||||
Int fillCustomInfo(String customtext)
|
||||
{
|
||||
Group p = notifier_layout;
|
||||
Group g_text = p.findObject("notifier.text");
|
||||
Group g_albumart = p.findObject("notifier.albumart");
|
||||
Text plentry = p.findObject("plentry");
|
||||
Text nexttrack = p.findObject("nexttrack");
|
||||
Text _title = p.findObject("title");
|
||||
Text album = p.findObject("album");
|
||||
Text artist = p.findObject("artist");
|
||||
Text endofplayback = p.findObject("endofplayback");
|
||||
|
||||
if (g_text) { g_text.hide(); }
|
||||
if (g_albumart) g_albumart.hide();
|
||||
|
||||
if (plentry) { plentry.hide(); }
|
||||
if (nexttrack) nexttrack.hide();
|
||||
if (_title) { _title.hide(); }
|
||||
if (artist) { artist.hide(); }
|
||||
if (album) { album.hide(); }
|
||||
|
||||
if (endofplayback != NULL /*&& s_endofplayback != NULL*/) {
|
||||
endofplayback.setText(translate(customtext)+" ");
|
||||
//s_endofplayback.setText(translate(customtext)+" ");
|
||||
int aw = endofplayback.getAutoWidth();
|
||||
endofplayback.show();
|
||||
//s_endofplayback.show();
|
||||
if (aw > 128)
|
||||
return aw;
|
||||
}
|
||||
return 128;
|
||||
}
|
||||
|
||||
//BUGFIX remove this timer later
|
||||
fallbackTempFix.onTimer() //As soon as this timer runs, bug mode is ON ;)
|
||||
{
|
||||
if (checkPref(0)) return;
|
||||
|
||||
if (!notifier_layout) onNext();
|
||||
|
||||
if(!triggerBug)
|
||||
{
|
||||
triggerBug = true;
|
||||
|
||||
onAlbumArt(cover.isInvalid()); //First time we see the bug
|
||||
fallbackTempFix.setDelay(30);
|
||||
|
||||
DebugString("Hello Bug", 9);
|
||||
}
|
||||
else if(triggerBug && !cover.isLoading()) onAlbumArt(cover.isInvalid());
|
||||
}
|
||||
|
||||
onAlbumArt(Boolean success){
|
||||
fallbackTempFix.stop(); //BUGFIX remove later
|
||||
|
||||
DebugString("onAlbumArtLoaded: success="+integerToString(success), 9);
|
||||
DebugString("onAlbumArtLoaded: handleAACalback="+integerToString(handleAACalback), 9);
|
||||
DebugString("onAlbumArtLoaded: cover.isLoading="+integerToString(cover.isLoading()), 9);
|
||||
DebugString("onAlbumArtLoaded: cover.isInvalid="+integerToString(cover.isInvalid()), 9);
|
||||
if (!handleAACalback || !notifier_layout /*|| isLoading()*/)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
handleAACalback = cover.isLoading();
|
||||
cancelAnimation();
|
||||
showNotifier(fillNextTrackInfo(cur_status));
|
||||
}
|
BIN
Src/resources/skins/Winamp Modern/scripts/notifier.maki
Normal file
BIN
Src/resources/skins/Winamp Modern/scripts/notifier.maki
Normal file
Binary file not shown.
426
Src/resources/skins/Winamp Modern/scripts/playlistpro.m
Normal file
426
Src/resources/skins/Winamp Modern/scripts/playlistpro.m
Normal file
|
@ -0,0 +1,426 @@
|
|||
/*
|
||||
|
||||
PlaylistPro build 005
|
||||
Originally done by pjn123 (www.skinconsortium.com) for the Classic Pro plugin
|
||||
|
||||
*/
|
||||
|
||||
#include "lib/std.mi"
|
||||
#include "lib/pldir.mi"
|
||||
#include "init_Playlist.m"
|
||||
|
||||
Function resizeResults(int items);
|
||||
Function doSearch(String input);
|
||||
Function setSearchBox(boolean onOff);
|
||||
Function clearSearchBox();
|
||||
Function int getPlEntry(int search_item);
|
||||
Function String replaceString(string baseString, string toreplace, string replacedby);
|
||||
|
||||
Global Group frameGroup, topbar;
|
||||
Global Edit searchBox;
|
||||
Global Text helpSearch, searchNews;// fakeText;
|
||||
Global GuiObject fakeSB, searchXUI, searchButtonXui;
|
||||
Global Button searchButton, clearButton, clearButtonText;
|
||||
Global GuiList searchResults;
|
||||
Global Boolean foundsomething;
|
||||
Global int tn, h_tune;
|
||||
Global String temptoken;
|
||||
Global Windowholder plwh;
|
||||
GLobal Timer refreshActiveCheck;
|
||||
Global PopupMenu search_rc;
|
||||
|
||||
Global Container results_container;
|
||||
Global Layout results_layout, main_layout;
|
||||
|
||||
System.onScriptLoaded() {
|
||||
frameGroup = getScriptGroup();
|
||||
topbar = frameGroup.findObject("PlaylistPro.topbar");
|
||||
plwh = frameGroup.findObject("wdh.playlist");
|
||||
|
||||
searchBox = frameGroup.findObject("wasabi.edit.box");
|
||||
searchXUI = frameGroup.findObject("pl.search.edit");
|
||||
searchButton = frameGroup.findObject("pl.search.go");
|
||||
searchButtonXui = frameGroup.findObject("pl.search.go");
|
||||
fakeSB = frameGroup.findObject("pl.search.edit.rect");
|
||||
clearButton = frameGroup.findObject("pl.search.edit.clear");
|
||||
clearButtonText = frameGroup.findObject("pl.search.edit.clear.text");
|
||||
helpSearch = frameGroup.findObject("pl.search.edit.searchhelp");
|
||||
//fakeText = frameGroup.findObject("pl.search.go.text.fake");
|
||||
|
||||
results_container = newDynamicContainer("searchresults");
|
||||
results_layout = results_container.getLayout("normal");
|
||||
searchResults = results_layout.findObject("PlaylistPro.list");
|
||||
searchResults.setFontSize(16);
|
||||
searchNews = results_layout.findObject("PlaylistPro.list.news");
|
||||
|
||||
main_layout = getContainer("Pledit").getLayout("normal");
|
||||
|
||||
initAttribs_Playlist();
|
||||
|
||||
//translation workaround
|
||||
/*searchButtonXui.setXmlParam("text", System.translate("Search"));
|
||||
searchButtonXui.setXmlParam("x", integerToString(-1*fakeText.getAutoWidth()-4));
|
||||
searchButtonXui.setXmlParam("w", integerToString(fakeText.getAutoWidth()+2));
|
||||
searchXUI.setXmlParam("w", integerToString(-1*fakeText.getAutoWidth()-9));*/
|
||||
|
||||
refreshActiveCheck = new Timer;
|
||||
refreshActiveCheck.setDelay(100);
|
||||
}
|
||||
System.onScriptUnLoading() {
|
||||
delete refreshActiveCheck;
|
||||
}
|
||||
|
||||
refreshActiveCheck.onTimer(){
|
||||
if((!System.isAppActive() || System.isMinimized()) && results_layout.isVisible() ) results_layout.hide();
|
||||
}
|
||||
|
||||
results_layout.onSetVisible(boolean onOff){
|
||||
if(onOff){
|
||||
refreshActiveCheck.start();
|
||||
}
|
||||
else{
|
||||
refreshActiveCheck.stop();
|
||||
}
|
||||
}
|
||||
|
||||
System.onShowLayout(Layout _layout){
|
||||
if(main_layout.isVisible()) results_layout.setXmlParam("ontop", "1");
|
||||
}
|
||||
|
||||
frameGroup.onSetVisible(boolean onOff){
|
||||
if(!onOff) clearSearchBox();
|
||||
}
|
||||
|
||||
searchButton.onLeftClick(){
|
||||
doSearch(searchBox.getText());
|
||||
}
|
||||
|
||||
resizeResults(int items){
|
||||
/*results_layout.setTargetX(results_layout.getLeft());
|
||||
results_layout.setTargetY(results_layout.getTop());
|
||||
results_layout.setTargetW(results_layout.getWidth());
|
||||
results_layout.setTargetH(500);
|
||||
results_layout.setTargetSpeed(1);
|
||||
results_layout.gotoTarget();*/
|
||||
|
||||
//items++; //temp add one extra for info... xx items found
|
||||
if(items>20) items=20;
|
||||
|
||||
|
||||
if(items>=1) h_tune=29;
|
||||
else h_tune=25;
|
||||
|
||||
//results_layout.setXmlParam("h", integerToString(20+items*18));
|
||||
|
||||
/*results_layout.setTargetX(results_layout.getLeft());
|
||||
results_layout.setTargetY(results_layout.getTop());
|
||||
results_layout.setTargetW(results_layout.getWidth());
|
||||
results_layout.setTargetH(h_tune+items*16);
|
||||
results_layout.setTargetSpeed(0.3);
|
||||
results_layout.gotoTarget();*/
|
||||
results_layout.resize(results_layout.getLeft(), results_layout.getTop(), results_layout.getWidth(), h_tune+items*16);
|
||||
}
|
||||
|
||||
searchBox.onEnter(){
|
||||
doSearch(searchBox.getText());
|
||||
}
|
||||
|
||||
doSearch(String input){
|
||||
if(input==""){
|
||||
clearSearchBox();
|
||||
return;
|
||||
}
|
||||
|
||||
//search history stuff
|
||||
String history = getPublicString("cPro.PlaylistPro.history", "");
|
||||
history = replaceString(history, input, "");
|
||||
history = replaceString(history, ";;", ";");
|
||||
if(strleft(history, 1)==";") history = strright(history, strlen(history)-1);
|
||||
if(strright(history, 1)==";") history = strleft(history, strlen(history)-1);
|
||||
if(history=="") history= input;
|
||||
else history= input+";"+history;
|
||||
|
||||
String output = getToken(history, ";", 0);
|
||||
for(int i = 1; i<15; i++){
|
||||
if(getToken(history, ";", i)=="") break;
|
||||
output+=";"+getToken(history, ";", i);
|
||||
}
|
||||
setPublicString("cPro.PlaylistPro.history", history);
|
||||
|
||||
|
||||
int itemsfound = 0;
|
||||
input = strlower(input);
|
||||
|
||||
results_layout.setXmlParam("x", integerToString(fakeSB.clientToScreenX(fakeSB.getLeft()-2)));
|
||||
results_layout.setXmlParam("y", integerToString(fakeSB.clientToScreenY(fakeSB.getTop() + fakeSB.getHeight())));
|
||||
results_layout.setXmlParam("w", integerToString(frameGroup.getWidth()-19));
|
||||
|
||||
if(!results_layout.isVisible()) results_layout.setXmlParam("h", "1");
|
||||
|
||||
searchResults.deleteAllItems();
|
||||
searchResults.scrollToItem(0);
|
||||
|
||||
for(int i = 0; i<PlEdit.getNumTracks(); i++){
|
||||
foundsomething=false;
|
||||
|
||||
for(tn = 0; tn<10; tn++){
|
||||
if(getToken(input, " ", tn)==""){
|
||||
break;
|
||||
}
|
||||
|
||||
temptoken = getToken(input, " ", tn);
|
||||
if(strsearch(strlower(PlEdit.getTitle(i) + " " + PlEdit.getFileName(i)), temptoken)>=0){
|
||||
foundsomething=true;
|
||||
}
|
||||
else{
|
||||
foundsomething=false;
|
||||
}
|
||||
|
||||
if(!foundsomething){
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(foundsomething){
|
||||
itemsfound++;
|
||||
searchResults.addItem(integerToString(i+1)+". " + PlEdit.getTitle(i));
|
||||
if(itemsfound>500){
|
||||
searchNews.setText("Search result limited to 500 items");
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(itemsfound==0){
|
||||
searchNews.setText("Nothing was found");
|
||||
}
|
||||
else if(itemsfound<=500){
|
||||
searchNews.setText(System.translate("Items found: ") +integerToString(itemsfound));
|
||||
}
|
||||
|
||||
if(!results_layout.isVisible()) results_layout.show();
|
||||
|
||||
// Fix if always on top is enabled.. it just refresh the ontop ;)
|
||||
results_layout.setXmlParam("ontop", "1");
|
||||
|
||||
resizeResults(itemsfound);
|
||||
}
|
||||
|
||||
searchResults.onDoubleClick(Int itemnum){
|
||||
PlEdit.playTrack (getPlEntry(itemnum));
|
||||
setSearchBox(false);
|
||||
}
|
||||
|
||||
searchResults.onRightClick(Int itemnum){
|
||||
search_rc = new PopupMenu;
|
||||
search_rc.addCommand("Move selected to top", 1, 0, 0);
|
||||
search_rc.addCommand("Move selected to bottom", 2, 0, 0);
|
||||
search_rc.addCommand("Move selected after current", 3, 0, 0);
|
||||
search_rc.addCommand("Move selected together", 4, 0, 0);
|
||||
search_rc.addSeparator();
|
||||
search_rc.addCommand("Remove selected from playlist", 5, 0, 0);
|
||||
int result = search_rc.popAtMouse();
|
||||
delete search_rc;
|
||||
|
||||
int lastselected = searchResults.getFirstItemSelected();
|
||||
int itemcounter = 1;
|
||||
|
||||
if(result==1){
|
||||
PlEdit.moveTo (getPlEntry(lastselected), 0);
|
||||
while(searchResults.getNextItemSelected(lastselected) != -1){
|
||||
lastselected = searchResults.getNextItemSelected(lastselected);
|
||||
PlEdit.moveTo (getPlEntry(lastselected), itemcounter);
|
||||
itemcounter++;
|
||||
}
|
||||
PlEdit.showTrack(0);
|
||||
}
|
||||
else if(result==2){
|
||||
PlEdit.moveTo (getPlEntry(lastselected), PlEdit.getNumTracks ()-1);
|
||||
while(searchResults.getNextItemSelected(lastselected) != -1){
|
||||
lastselected = searchResults.getNextItemSelected(lastselected);
|
||||
PlEdit.moveTo (getPlEntry(lastselected)-itemcounter, PlEdit.getNumTracks ()-1);
|
||||
itemcounter++;
|
||||
}
|
||||
PlEdit.showTrack(PlEdit.getNumTracks ()-1);
|
||||
}
|
||||
else if(result==3){
|
||||
int align = 0;
|
||||
int orignalPos = PlEdit.getCurrentIndex();
|
||||
int temp = getPlEntry(lastselected);
|
||||
if(PlEdit.getCurrentIndex() > temp) align++;
|
||||
|
||||
if(orignalPos > getPlEntry(lastselected)) PlEdit.moveTo (getPlEntry(lastselected), PlEdit.getCurrentIndex());
|
||||
else PlEdit.moveTo (getPlEntry(lastselected), PlEdit.getCurrentIndex()+1);
|
||||
|
||||
while(searchResults.getNextItemSelected(lastselected) != -1){
|
||||
lastselected = searchResults.getNextItemSelected(lastselected);
|
||||
|
||||
if(orignalPos != getPlEntry(lastselected)){
|
||||
if(orignalPos > getPlEntry(lastselected)){
|
||||
PlEdit.moveTo (getPlEntry(lastselected)-align, PlEdit.getCurrentIndex()+itemcounter);
|
||||
}
|
||||
else{
|
||||
PlEdit.moveTo (getPlEntry(lastselected), PlEdit.getCurrentIndex()+itemcounter+1);
|
||||
}
|
||||
|
||||
temp = getPlEntry(lastselected);
|
||||
if(orignalPos > temp) align++;
|
||||
itemcounter++;
|
||||
}
|
||||
}
|
||||
PlEdit.showCurrentlyPlayingTrack();
|
||||
}
|
||||
else if(result==4){
|
||||
int startpos = getPlEntry(lastselected);
|
||||
while(searchResults.getNextItemSelected(lastselected) != -1){
|
||||
lastselected = searchResults.getNextItemSelected(lastselected);
|
||||
PlEdit.moveTo (getPlEntry(lastselected), startpos+itemcounter);
|
||||
itemcounter++;
|
||||
}
|
||||
PlEdit.showTrack(startpos);
|
||||
}
|
||||
else if(result==5){
|
||||
PlEdit.removeTrack (getPlEntry(lastselected));
|
||||
while(searchResults.getNextItemSelected(lastselected) != -1){
|
||||
lastselected = searchResults.getNextItemSelected(lastselected);
|
||||
PlEdit.removeTrack (getPlEntry(lastselected)-itemcounter);
|
||||
itemcounter++;
|
||||
}
|
||||
}
|
||||
|
||||
else return;
|
||||
|
||||
//hides the search
|
||||
setSearchBox(false);
|
||||
}
|
||||
|
||||
int getPlEntry(int search_item){
|
||||
return stringToInteger(getToken(searchResults.getItemLabel(search_item,0), ". ", 0))-1;
|
||||
}
|
||||
|
||||
setSearchBox(boolean onOff){
|
||||
if(onOff){
|
||||
searchBox.show();
|
||||
clearButton.show();
|
||||
clearButtonText.show();
|
||||
helpSearch.hide();
|
||||
searchBox.setFocus();
|
||||
}
|
||||
else{
|
||||
searchBox.hide();
|
||||
clearButton.hide();
|
||||
clearButtonText.hide();
|
||||
helpSearch.show();
|
||||
results_layout.hide();
|
||||
}
|
||||
}
|
||||
|
||||
fakeSB.onLeftButtonDown(int x, int y){
|
||||
setSearchBox(true);
|
||||
}
|
||||
fakeSB.onRightButtonDown(int x, int y){
|
||||
search_rc = new PopupMenu;
|
||||
search_rc.addCommand("** Search history **", 0, 0, 1);
|
||||
search_rc.addSeparator();
|
||||
|
||||
String history = getPublicString("cPro.PlaylistPro.history", "");
|
||||
boolean historyfound=false;
|
||||
for(int i=0;i<15;i++){
|
||||
String historyitem = getToken(history, ";", i);
|
||||
if(historyitem==""){
|
||||
if(i>0) historyfound=true;
|
||||
break;
|
||||
}
|
||||
search_rc.addCommand(historyitem, i+1, 0, 0);
|
||||
}
|
||||
if(historyfound) search_rc.addSeparator();
|
||||
search_rc.addCommand("Clear History", 100, 0, 0);
|
||||
|
||||
int result = search_rc.popAtMouse();
|
||||
delete search_rc;
|
||||
|
||||
if(result>0 && result<100){
|
||||
setSearchBox(true);
|
||||
searchBox.setText(getToken(history, ";", result-1));
|
||||
searchButton.leftClick();
|
||||
}
|
||||
else if(result==100){
|
||||
setPublicString("cPro.PlaylistPro.history", "");
|
||||
}
|
||||
}
|
||||
|
||||
clearSearchBox(){
|
||||
searchBox.setText("");
|
||||
setSearchBox(false);
|
||||
}
|
||||
|
||||
main_layout.onMove(){
|
||||
if(results_layout.isVisible()){
|
||||
results_layout.setXmlParam("x", integerToString(fakeSB.clientToScreenX(fakeSB.getLeft()-2)));
|
||||
results_layout.setXmlParam("y", integerToString(fakeSB.clientToScreenY(fakeSB.getTop() + fakeSB.getHeight())));
|
||||
results_layout.setXmlParam("ontop", "1");
|
||||
}
|
||||
}
|
||||
main_layout.onResize(int x, int y, int w, int h){
|
||||
if(results_layout.isVisible()) clearSearchBox();
|
||||
}
|
||||
|
||||
frameGroup.onResize(int x, int y, int w, int h){
|
||||
if(results_layout.isVisible()) clearSearchBox();
|
||||
|
||||
//if(playlist_search_attib.getData()=="0") return;
|
||||
|
||||
if(h<102 || playlist_search_attrib.getData()=="0"){
|
||||
|
||||
if(!topbar.isVisible()) return; //Don't do the same code over and over
|
||||
|
||||
topbar.hide();
|
||||
plwh.setXmlParam("y", "0");
|
||||
plwh.setXmlParam("h", "0");
|
||||
}
|
||||
else{
|
||||
if(topbar.isVisible()) return; //Don't do the same code over and over
|
||||
|
||||
topbar.show();
|
||||
plwh.setXmlParam("y", "30");
|
||||
plwh.setXmlParam("h", "-30");
|
||||
}
|
||||
}
|
||||
|
||||
clearButton.onLeftClick(){
|
||||
clearSearchBox();
|
||||
}
|
||||
|
||||
playlist_search_attrib.onDataChanged(){
|
||||
frameGroup.onResize(frameGroup.getLeft(), frameGroup.getTop(), frameGroup.getWidth(), frameGroup.getHeight());
|
||||
//debug("abc " + getData());
|
||||
|
||||
if (getData() == "0"){
|
||||
topbar.hide();
|
||||
plwh.setXMLParam("y", "0");
|
||||
plwh.setXMLParam("h", "0");
|
||||
}
|
||||
else if(getData() == "1"){
|
||||
|
||||
topbar.show();
|
||||
plwh.setXMLParam("y", "30");
|
||||
plwh.setXMLParam("h", "-30");
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
String replaceString(string baseString, string toreplace, string replacedby){
|
||||
if (toreplace == "") return baseString;
|
||||
string sf1 = strupper(baseString);
|
||||
string sf2 = strupper(toreplace);
|
||||
int i = strsearch(sf1, sf2);
|
||||
if (i == -1) return baseString;
|
||||
string left = "", right = "";
|
||||
if (i != 0) left = strleft(baseString, i);
|
||||
if (strlen(basestring) - i - strlen(toreplace) != 0) {
|
||||
right = strright(basestring, strlen(basestring) - i - strlen(toreplace));
|
||||
}
|
||||
return left + replacedby + right;
|
||||
}
|
BIN
Src/resources/skins/Winamp Modern/scripts/playlistpro.maki
Normal file
BIN
Src/resources/skins/Winamp Modern/scripts/playlistpro.maki
Normal file
Binary file not shown.
72
Src/resources/skins/Winamp Modern/scripts/plmenu.m
Normal file
72
Src/resources/skins/Winamp Modern/scripts/plmenu.m
Normal file
|
@ -0,0 +1,72 @@
|
|||
#include <lib/std.mi>
|
||||
#include "attribs.m"
|
||||
|
||||
Global Layout pl_normal;
|
||||
Global Layout pl_shade;
|
||||
|
||||
System.onScriptLoaded() {
|
||||
initAttribs();
|
||||
menubar_pe_attrib.onDataChanged();
|
||||
pl_normal = getScriptGroup().getParentLayout();
|
||||
}
|
||||
|
||||
menubar_pe_attrib.onDataChanged() {
|
||||
Group Player = getscriptgroup().findobject("player.content.pl.dummy.group");
|
||||
Group MenuBar = getscriptgroup().findobject("wasabi.menubar.pl");
|
||||
Layout main = getscriptgroup().getParentLayout();
|
||||
|
||||
main.beforeRedock();
|
||||
if (getData() == "1") {
|
||||
Player.setXmlParam("y","16");
|
||||
MenuBar.show();
|
||||
main.snapAdjust(0,0,0,0);
|
||||
}
|
||||
else {
|
||||
Player.setXmlParam("y","0");
|
||||
MenuBar.hide();
|
||||
main.snapAdjust(0,0,0,16);
|
||||
}
|
||||
main.Redock();
|
||||
}
|
||||
|
||||
System.onKeyDown(String k) {
|
||||
if (pl_shade == NULL)
|
||||
pl_shade = pl_normal.getContainer().getLayout("shade");
|
||||
|
||||
if (StrLeft(k,4) == "ctrl" && StrSearch(k, "+w") != -1 && (pl_normal.isActive() || pl_shade.isActive())) {
|
||||
if (pl_normal.isVisible())
|
||||
pl_normal.getContainer().switchToLayout("shade");
|
||||
else
|
||||
pl_normal.getContainer().switchToLayout("normal");
|
||||
complete;
|
||||
}
|
||||
}
|
||||
|
||||
System.onAccelerator(String action, String section, String key) {
|
||||
if (menubar_main_attrib.getData() == "0") return;
|
||||
Layout l = getScriptGroup().getParentLayout();
|
||||
if (!l.isActive()) return;
|
||||
|
||||
// we use the general accelerators otherwise use specific ones
|
||||
// will allow the skin to cope with variations in localisations
|
||||
if (action == "MENUHOTKEY_FILE" || action == "PL_MENUHOTKEY_FILE")
|
||||
{
|
||||
getScriptGroup().findObject("PE_File.menu").sendAction("open", "", 0, 0, 0, 0);
|
||||
complete;
|
||||
}
|
||||
if (action == "MENUHOTKEY_PLAY" || action == "PL_MENUHOTKEY_PLAYLIST")
|
||||
{
|
||||
getScriptGroup().findObject("PE_Playlist.menu").sendAction("open", "", 0, 0, 0, 0);
|
||||
complete;
|
||||
}
|
||||
if (action == "PL_MENUHOTKEY_SORT")
|
||||
{
|
||||
getScriptGroup().findObject("PE_Sort.menu").sendAction("open", "", 0, 0, 0, 0);
|
||||
complete;
|
||||
}
|
||||
if (action == "MENUHOTKEY_HELP" || action == "PL_MENUHOTKEY_HELP")
|
||||
{
|
||||
getScriptGroup().findObject("PE_Help.menu").sendAction("open", "", 0, 0, 0, 0);
|
||||
complete;
|
||||
}
|
||||
}
|
BIN
Src/resources/skins/Winamp Modern/scripts/plmenu.maki
Normal file
BIN
Src/resources/skins/Winamp Modern/scripts/plmenu.maki
Normal file
Binary file not shown.
62
Src/resources/skins/Winamp Modern/scripts/pltime.m
Normal file
62
Src/resources/skins/Winamp Modern/scripts/pltime.m
Normal file
|
@ -0,0 +1,62 @@
|
|||
#include <lib/std.mi>
|
||||
#include "attribs.m"
|
||||
|
||||
Global Layer TimeBG,TimeDisplay;
|
||||
Global Text PLTime;
|
||||
Global Group frameGroup;
|
||||
Global GuiObject SongTicker;
|
||||
Global Timer callback;
|
||||
|
||||
function setSongtickerScrolling();
|
||||
|
||||
System.onScriptLoaded() {
|
||||
initAttribs();
|
||||
frameGroup = getScriptGroup();
|
||||
TimeBG = frameGroup.findobject("player.pl.time.left");
|
||||
TimeDisplay = frameGroup.findobject("player.pl.time.display.left");
|
||||
PLTime = frameGroup.findobject("PLTime");
|
||||
callback = new Timer; callback.setDelay(1); callback.start();
|
||||
}
|
||||
|
||||
callback.onTimer() {
|
||||
Container c = getContainer("pledit");
|
||||
if (c) {
|
||||
Layout l = c.getLayout("shade");
|
||||
if (l) {
|
||||
SongTicker = l.findObject("PESongticker");
|
||||
}
|
||||
}
|
||||
if (SongTicker) callback.stop();
|
||||
setSongtickerScrolling();
|
||||
}
|
||||
|
||||
frameGroup.onResize(int x, int y, int w, int h) {
|
||||
if (w>394) {
|
||||
TimeBG.show();
|
||||
TimeDisplay.show();
|
||||
PLTime.setXMLParam("x","-215");
|
||||
PLTime.setXMLParam("w","90");
|
||||
} else {
|
||||
TimeBG.hide();
|
||||
TimeDisplay.hide();
|
||||
PLTime.setXMLParam("x","-180");
|
||||
PLTime.setXMLParam("w","55");
|
||||
}
|
||||
}
|
||||
|
||||
songticker_scrolling_attrib.onDataChanged() {
|
||||
setSongtickerScrolling();
|
||||
}
|
||||
|
||||
setSongtickerScrolling() {
|
||||
if (!Songticker)
|
||||
return;
|
||||
|
||||
if (songticker_scrolling_modern_attrib.getData()=="1") {
|
||||
SongTicker.setXMLParam("ticker","bounce");
|
||||
} else if (songticker_scrolling_classic_attrib.getData()=="1") {
|
||||
SongTicker.setXMLParam("ticker","scroll");
|
||||
} else {
|
||||
SongTicker.setXMLParam("ticker","off");
|
||||
}
|
||||
}
|
BIN
Src/resources/skins/Winamp Modern/scripts/pltime.maki
Normal file
BIN
Src/resources/skins/Winamp Modern/scripts/pltime.maki
Normal file
Binary file not shown.
65
Src/resources/skins/Winamp Modern/scripts/seek.m
Normal file
65
Src/resources/skins/Winamp Modern/scripts/seek.m
Normal file
|
@ -0,0 +1,65 @@
|
|||
#include <lib/std.mi>
|
||||
|
||||
Global Group frameGroup;
|
||||
Global Slider Seeker;
|
||||
Global Int Seeking;
|
||||
Global Timer SongTickerTimer;
|
||||
Global Text InfoTicker;
|
||||
Global GuiObject SongTicker;
|
||||
Global layer SeekPos;
|
||||
|
||||
System.onScriptLoaded() {
|
||||
|
||||
frameGroup = getScriptGroup();
|
||||
Seeker = frameGroup.findObject("SeekerGhost");
|
||||
SongTicker = frameGroup.findObject("songticker");
|
||||
SeekPos = frameGroup.findObject("player.seekbar.pos");
|
||||
InfoTicker = frameGroup.findObject("infoticker");
|
||||
|
||||
SongTickerTimer = new Timer;
|
||||
SongTickerTimer.setDelay(1000);
|
||||
}
|
||||
|
||||
SongTickerTimer.onTimer() {
|
||||
SongTicker.show();
|
||||
InfoTicker.hide();
|
||||
SongTickerTimer.stop();
|
||||
}
|
||||
|
||||
System.onScriptUnloading() {
|
||||
delete SongTickerTimer;
|
||||
}
|
||||
|
||||
|
||||
Seeker.onSetPosition(int p) {
|
||||
if (seeking) {
|
||||
Float f;
|
||||
f = p;
|
||||
f = f / 255 * 100;
|
||||
Float len = getPlayItemLength();
|
||||
if (len != 0) {
|
||||
int np = len * f / 100;
|
||||
SongTickerTimer.start();
|
||||
SongTicker.hide();
|
||||
InfoTicker.show();
|
||||
InfoTicker.setText(translate("Seek") + ":" + integerToTime(np) + "/" + integerToTime(len) + " (" + integerToString(f) + "%) ");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Seeker.onLeftButtonDown(int x, int y) {
|
||||
seeking = 1;
|
||||
}
|
||||
|
||||
Seeker.onLeftButtonUp(int x, int y) {
|
||||
seeking = 0;
|
||||
SongTickerTimer.start();
|
||||
SongTicker.show();
|
||||
InfoTicker.hide();
|
||||
}
|
||||
|
||||
Seeker.onSetFinalPosition(int p) {
|
||||
SongTickerTimer.start();
|
||||
SongTicker.show();
|
||||
InfoTicker.hide();
|
||||
}
|
BIN
Src/resources/skins/Winamp Modern/scripts/seek.maki
Normal file
BIN
Src/resources/skins/Winamp Modern/scripts/seek.maki
Normal file
Binary file not shown.
64
Src/resources/skins/Winamp Modern/scripts/seekshade.m
Normal file
64
Src/resources/skins/Winamp Modern/scripts/seekshade.m
Normal file
|
@ -0,0 +1,64 @@
|
|||
#include <lib/std.mi>
|
||||
|
||||
Global Group frameGroup;
|
||||
Class Slider Seeker;
|
||||
Global Seeker Seeker1, Seeker2;
|
||||
Global Int Seeking;
|
||||
Global Timer SongTickerTimer;
|
||||
Global GuiObject SongTicker;
|
||||
Global Text InfoTicker;
|
||||
|
||||
System.onScriptLoaded() {
|
||||
frameGroup = getScriptGroup();
|
||||
Seeker1 = frameGroup.findObject("shadeSeekerGhost");
|
||||
Seeker2 = frameGroup.findObject("shadeSeekerGhost2");
|
||||
SongTicker = frameGroup.findObject("SongtickerShade");
|
||||
InfoTicker = frameGroup.findObject("infotickerShade");
|
||||
|
||||
SongTickerTimer = new Timer;
|
||||
SongTickerTimer.setDelay(1000);
|
||||
}
|
||||
|
||||
SongTickerTimer.onTimer() {
|
||||
SongTicker.show();
|
||||
InfoTicker.hide();
|
||||
SongTickerTimer.stop();
|
||||
}
|
||||
|
||||
System.onScriptUnloading() {
|
||||
delete SongTickerTimer;
|
||||
}
|
||||
|
||||
|
||||
Seeker.onSetPosition(int p) {
|
||||
if (seeking) {
|
||||
Float f;
|
||||
f = p;
|
||||
f = f / 255 * 100;
|
||||
Float len = getPlayItemLength();
|
||||
if (len != 0) {
|
||||
int np = len * f / 100;
|
||||
SongTickerTimer.start();
|
||||
SongTicker.hide();
|
||||
InfoTicker.show();
|
||||
InfoTicker.setText(translate("Seek") + ":" + integerToTime(np) + "/" + integerToTime(len) + " (" + integerToString(f) + "%) ");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Seeker.onLeftButtonDown(int x, int y) {
|
||||
seeking = 1;
|
||||
}
|
||||
|
||||
Seeker.onLeftButtonUp(int x, int y) {
|
||||
seeking = 0;
|
||||
SongTickerTimer.start();
|
||||
SongTicker.show();
|
||||
InfoTicker.hide();
|
||||
}
|
||||
|
||||
Seeker.onSetFinalPosition(int p) {
|
||||
SongTickerTimer.start();
|
||||
SongTicker.show();
|
||||
InfoTicker.hide();
|
||||
}
|
BIN
Src/resources/skins/Winamp Modern/scripts/seekshade.maki
Normal file
BIN
Src/resources/skins/Winamp Modern/scripts/seekshade.maki
Normal file
Binary file not shown.
190
Src/resources/skins/Winamp Modern/scripts/shadecontrol.m
Normal file
190
Src/resources/skins/Winamp Modern/scripts/shadecontrol.m
Normal file
|
@ -0,0 +1,190 @@
|
|||
#include <lib/std.mi>
|
||||
#include "attribs.m"
|
||||
|
||||
function setObjects(int w);
|
||||
function setSongtickerScrolling();
|
||||
|
||||
Global Group frameGroup, gX1,gX2,gX3,display,display2,displaytimer,displayticker,displayvis;
|
||||
Global Button btnExpand,btnReduce,shadeeq;
|
||||
Global Layout main;
|
||||
Global Layout main_normal;
|
||||
Global Layer volumebar;
|
||||
Global Timer SongTickerTimer;
|
||||
Global GuiObject SongTicker;
|
||||
Global text InfoTicker;
|
||||
Global Button colorthemes;
|
||||
|
||||
System.onScriptLoaded() {
|
||||
initAttribs();
|
||||
|
||||
frameGroup = getScriptGroup();
|
||||
main = frameGroup.getParentLayout();
|
||||
main_normal = frameGroup.getParentLayout().getContainer().getLayout("normal");
|
||||
gX1 = frameGroup.findObject("shadeX1");
|
||||
gX2 = frameGroup.findObject("shadeX2");
|
||||
gX3 = frameGroup.findObject("shadeX3");
|
||||
shadeeq = frameGroup.findObject("shadeeq");
|
||||
display = frameGroup.findObject("shadedisplay");
|
||||
display2 = frameGroup.findObject("shadedisplay2");
|
||||
displaytimer = frameGroup.findObject("shadetimer");
|
||||
displayticker = frameGroup.findObject("shadeticker");
|
||||
displayvis = frameGroup.findObject("shadevis");
|
||||
btnExpand = frameGroup.findObject("shade.expand");
|
||||
btnReduce = frameGroup.findObject("shade.reduce");
|
||||
colorthemes = frameGroup.findObject("shadect");
|
||||
|
||||
SongTicker = frameGroup.findObject("SongtickerShade");
|
||||
InfoTicker = frameGroup.findObject("infotickerShade");
|
||||
SongTickerTimer = new Timer;
|
||||
SongTickerTimer.setDelay(1000);
|
||||
|
||||
volumebar = frameGroup.findObject("volumebarShade");
|
||||
volumebar.setXmlParam("w",integertostring( (system.getVolume()/255) *40 + 5));
|
||||
|
||||
setSongtickerScrolling();
|
||||
}
|
||||
|
||||
System.onScriptUnloading() {
|
||||
delete SongTickerTimer;
|
||||
}
|
||||
|
||||
SongTickerTimer.onTimer() {
|
||||
SongTicker.show();
|
||||
InfoTicker.hide();
|
||||
SongTickerTimer.stop();
|
||||
}
|
||||
|
||||
frameGroup.onResize(int x, int y, int w, int h) {
|
||||
setObjects(w);
|
||||
}
|
||||
|
||||
shadeeq.onLeftClick() {
|
||||
eq_visible_attrib.setData("1");
|
||||
}
|
||||
|
||||
setObjects(int w) {
|
||||
|
||||
int ShowButtons=getPrivateInt("winamp5", "ShowShadeButtons", 0);
|
||||
|
||||
if (ShowButtons) {
|
||||
btnExpand.show();
|
||||
btnReduce.hide();
|
||||
} else {
|
||||
btnExpand.hide();
|
||||
btnReduce.show();
|
||||
}
|
||||
|
||||
gX1.hide();
|
||||
gX2.hide();
|
||||
gX3.hide();
|
||||
display.hide();
|
||||
display2.hide();
|
||||
displaytimer.hide();
|
||||
displayticker.hide();
|
||||
displayvis.hide();
|
||||
|
||||
if (w>413) {
|
||||
int w_display=w-356;
|
||||
display.setXMLParam("w", integertostring(w_display));
|
||||
display.show();
|
||||
displaytimer.show();
|
||||
|
||||
if (w>433) {
|
||||
displayticker.show();
|
||||
displayticker.setXMLParam("w", integertostring(w_display-13));
|
||||
|
||||
if (w>573) {
|
||||
display.hide();
|
||||
display2.setXMLParam("w", integertostring(w_display-45));
|
||||
display2.show();
|
||||
displayticker.setXMLParam("w", integertostring(w_display-56-13));
|
||||
|
||||
if (ShowButtons) {
|
||||
gX1.setXMLParam("x", "-100");
|
||||
gX1.show();
|
||||
|
||||
if (w>596) {
|
||||
display2.setXMLParam("w", integertostring(w_display-68));
|
||||
displayticker.setXMLParam("w", integertostring(w_display-79-13));
|
||||
|
||||
gX1.setXMLParam("x", "-123");
|
||||
|
||||
gX2.setXMLParam("x", "-80");
|
||||
gX2.show();
|
||||
|
||||
if (w>655) {
|
||||
display2.setXMLParam("w", integertostring(w_display-127));
|
||||
displayticker.setXMLParam("w", integertostring(w_display-138-13));
|
||||
|
||||
gX1.setXMLParam("x", "-182");
|
||||
|
||||
gX2.setXMLParam("x", "-139");
|
||||
|
||||
gX3.setXMLParam("x", "-116");
|
||||
gX3.show();
|
||||
|
||||
if (w>673) {
|
||||
displayvis.setXMLParam("x", integertostring(-257));
|
||||
displayvis.show();
|
||||
displayticker.setXMLParam("w", integertostring(w_display-194-13));
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
display2.setXMLParam("w", integertostring(w_display));
|
||||
displayvis.setXMLParam("x", integertostring(-130));
|
||||
displayvis.show();
|
||||
displayticker.setXMLParam("w", integertostring(w_display-66-13));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
System.onKeyDown(String key) {
|
||||
if (StrLeft(key,4) == "ctrl" && StrSearch(key, "+w") != -1 && (main.isActive() || main_normal.isActive())) {
|
||||
if (main.isVisible())
|
||||
main.getContainer().switchToLayout("normal");
|
||||
else
|
||||
main.getContainer().switchToLayout("shade");
|
||||
complete;
|
||||
}
|
||||
}
|
||||
|
||||
btnExpand.onleftClick() {
|
||||
setPrivateInt("winamp5", "ShowShadeButtons", 0);
|
||||
setObjects(main.getGUIw());
|
||||
}
|
||||
|
||||
btnReduce.onleftClick() {
|
||||
setPrivateInt("winamp5", "ShowShadeButtons", 1);
|
||||
setObjects(main.getGUIw());
|
||||
}
|
||||
|
||||
System.onvolumechanged(int newvol)
|
||||
{
|
||||
volumebar.setXmlParam("w",integertostring( (newvol/255) *40 + 5));
|
||||
SongTickerTimer.start();
|
||||
SongTicker.hide();
|
||||
InfoTicker.show();
|
||||
InfoTicker.setText(translate("Volume") + ": " + integerToString(newvol/2.55) + "%");
|
||||
}
|
||||
|
||||
songticker_scrolling_attrib.onDataChanged() {
|
||||
setSongtickerScrolling();
|
||||
}
|
||||
|
||||
setSongtickerScrolling() {
|
||||
if (songticker_scrolling_modern_attrib.getData()=="1") {
|
||||
SongTicker.setXMLParam("ticker","bounce");
|
||||
} else if (songticker_scrolling_classic_attrib.getData()=="1") {
|
||||
SongTicker.setXMLParam("ticker","scroll");
|
||||
} else {
|
||||
SongTicker.setXMLParam("ticker","off");
|
||||
}
|
||||
}
|
||||
|
||||
colorthemes.onRightButtonDown(int x, int y) {
|
||||
triggerAction(colorthemes, "ThemesSlotsMenu", "");
|
||||
complete;
|
||||
}
|
BIN
Src/resources/skins/Winamp Modern/scripts/shadecontrol.maki
Normal file
BIN
Src/resources/skins/Winamp Modern/scripts/shadecontrol.maki
Normal file
Binary file not shown.
45
Src/resources/skins/Winamp Modern/scripts/shadelinks.m
Normal file
45
Src/resources/skins/Winamp Modern/scripts/shadelinks.m
Normal file
|
@ -0,0 +1,45 @@
|
|||
/*---------------------------------------------------
|
||||
-----------------------------------------------------
|
||||
Filename: syncbutton.m
|
||||
Version: 1.0
|
||||
|
||||
Type: maki
|
||||
Date: 25. Jun. 2007 - 14:04
|
||||
Author: Martin Poehlmann aka Deimos
|
||||
E-Mail: martin@skinconsortium.com
|
||||
Internet: www.skinconsortium.com
|
||||
www.martin.deimos.de.vu
|
||||
-----------------------------------------------------
|
||||
---------------------------------------------------*/
|
||||
|
||||
#include <lib/std.mi>
|
||||
|
||||
Function String getArtist ();
|
||||
|
||||
Global Button nowplaying;
|
||||
|
||||
System.onScriptLoaded ()
|
||||
{
|
||||
nowplaying = getScriptGroup().getObject("nowplaying");
|
||||
}
|
||||
|
||||
nowplaying.onLeftClick ()
|
||||
{
|
||||
String artist = getArtist();
|
||||
if (artist == "") return;
|
||||
|
||||
String icid = "winshadeiconmodern";
|
||||
|
||||
System.navigateUrlBrowser("http://client.winamp.com/nowplaying/artist/?icid="+ icid +"&artistName=" + artist);
|
||||
}
|
||||
|
||||
String getArtist ()
|
||||
{
|
||||
String artist = getPlayItemMetaDataString("artist");
|
||||
if (artist == "") artist = getPlayItemMetaDataString("uvox/artist");
|
||||
if (artist == "") artist = getPlayItemMetaDataString("cbs/artist");
|
||||
if (artist == "") artist = getPlayItemMetaDataString("streamtitle");
|
||||
if (artist == "") artist = getPlayItemDisplayTitle();
|
||||
|
||||
return artist;
|
||||
}
|
BIN
Src/resources/skins/Winamp Modern/scripts/shadelinks.maki
Normal file
BIN
Src/resources/skins/Winamp Modern/scripts/shadelinks.maki
Normal file
Binary file not shown.
41
Src/resources/skins/Winamp Modern/scripts/shadesizepos.m
Normal file
41
Src/resources/skins/Winamp Modern/scripts/shadesizepos.m
Normal file
|
@ -0,0 +1,41 @@
|
|||
#include <lib/std.mi>
|
||||
#include "attribs.m"
|
||||
|
||||
Function updateLinkage(int type);
|
||||
|
||||
System.onScriptLoaded() {
|
||||
initAttribs();
|
||||
if (windowshade_linkall_attrib.getData() == "1") windowshade_linkall_attrib.onDataChanged();
|
||||
if (windowshade_linkposition_attrib.getData() == "1") windowshade_linkposition_attrib.onDataChanged();
|
||||
if (windowshade_linknone_attrib.getData() == "1") windowshade_linknone_attrib.onDataChanged();
|
||||
}
|
||||
|
||||
windowshade_linkall_attrib.onDataChanged() {
|
||||
if (getData() == "1") updateLinkage(2);
|
||||
}
|
||||
|
||||
windowshade_linkposition_attrib.onDataChanged() {
|
||||
if (getData() == "1") updateLinkage(1);
|
||||
}
|
||||
|
||||
windowshade_linknone_attrib.onDataChanged() {
|
||||
if (getData() == "1") updateLinkage(0);
|
||||
}
|
||||
|
||||
updateLinkage(int type) {
|
||||
Layout shade = getScriptGroup().getParentLayout();
|
||||
Layout normal = shade.getContainer().getLayout("normal");
|
||||
if (type == 0) {
|
||||
shade.setXmlParam("unlinked", "1");
|
||||
shade.setXmlParam("linkwidth", "");
|
||||
normal.setXmlParam("linkwidth", "");
|
||||
} else if (type == 1) {
|
||||
shade.setXmlParam("unlinked", "0");
|
||||
shade.setXmlParam("linkwidth", "");
|
||||
normal.setXmlParam("linkwidth", "");
|
||||
} else if (type == 2) {
|
||||
shade.setXmlParam("unlinked", "0");
|
||||
shade.setXmlParam("linkwidth", "normal");
|
||||
normal.setXmlParam("linkwidth", "shade");
|
||||
}
|
||||
}
|
BIN
Src/resources/skins/Winamp Modern/scripts/shadesizepos.maki
Normal file
BIN
Src/resources/skins/Winamp Modern/scripts/shadesizepos.maki
Normal file
Binary file not shown.
165
Src/resources/skins/Winamp Modern/scripts/songinfo.m
Normal file
165
Src/resources/skins/Winamp Modern/scripts/songinfo.m
Normal file
|
@ -0,0 +1,165 @@
|
|||
#include <lib/std.mi>
|
||||
|
||||
Function string tokenizeSongInfo(String tkn, String sinfo);
|
||||
Function getSonginfo(String SongInfoString);
|
||||
Function loadPlaylistArtWork();
|
||||
|
||||
Global Group frameGroup;
|
||||
Global Layer channelDisplay;
|
||||
Global Text bitrateText, FrequencyText;
|
||||
Global Timer songInfoTimer;
|
||||
Global String SongInfoString;
|
||||
Global AlbumArtLayer waaa;
|
||||
Global Int waaaRetries = 0;
|
||||
|
||||
System.onScriptLoaded(){
|
||||
frameGroup = getScriptGroup();
|
||||
|
||||
bitrateText = frameGroup.findObject("Bitrate");
|
||||
frequencyText = frameGroup.findObject("Frequency");
|
||||
|
||||
channelDisplay = frameGroup.findObject("channels");
|
||||
|
||||
songInfoTimer = new Timer;
|
||||
songInfoTimer.setDelay(1000);
|
||||
|
||||
if (getStatus() == STATUS_PLAYING) {
|
||||
String sit = getSongInfoText();
|
||||
waaaRetries = 0;
|
||||
if (sit != "") getSonginfo(sit);
|
||||
else songInfoTimer.setDelay(50); // goes to 1000 once info is available
|
||||
songInfoTimer.start();
|
||||
} else if (getStatus() == STATUS_PAUSED) {
|
||||
getSonginfo(getSongInfoText());
|
||||
}
|
||||
}
|
||||
|
||||
loadPlaylistArtWork()
|
||||
{
|
||||
Container albumart = System.getContainer("winamp.albumart");
|
||||
if(albumart)
|
||||
{
|
||||
Layout aalayout = albumart.getLayout("normal");
|
||||
if(aalayout)
|
||||
{
|
||||
waaa = aalayout.findObject("waaa");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
System.onScriptUnloading(){
|
||||
delete songInfoTimer;
|
||||
}
|
||||
|
||||
System.onPlay(){
|
||||
String sit = getSongInfoText();
|
||||
waaaRetries = 0;
|
||||
if (sit != "") getSonginfo(sit);
|
||||
else songInfoTimer.setDelay(50); // goes to 1000 once info is available
|
||||
songInfoTimer.start();
|
||||
}
|
||||
|
||||
System.onStop(){
|
||||
waaaRetries = 0;
|
||||
songInfoTimer.stop();
|
||||
frequencyText.setText("(__)");
|
||||
bitrateText.setText("(___)");
|
||||
channelDisplay.setXmlParam("image", "player.songinfo.none");
|
||||
}
|
||||
|
||||
System.onResume(){
|
||||
String sit = getSongInfoText();
|
||||
if (sit != "") getSonginfo(sit);
|
||||
else songInfoTimer.setDelay(50); // goes to 1000 once info is available
|
||||
songInfoTimer.start();
|
||||
}
|
||||
|
||||
System.onPause(){
|
||||
songInfoTimer.stop();
|
||||
}
|
||||
|
||||
songInfoTimer.onTimer(){
|
||||
String sit = getSongInfoText();
|
||||
if (sit == "") return;
|
||||
songInfoTimer.setDelay(1000);
|
||||
getSonginfo(sit);
|
||||
|
||||
if(!waaa) loadPlaylistArtWork();
|
||||
if(waaa)
|
||||
{
|
||||
if(waaa.isInvalid() && waaaRetries < 5)
|
||||
{
|
||||
waaaRetries += 1;
|
||||
waaa.refresh();
|
||||
waaa.show();
|
||||
}
|
||||
else if(!waaa.isInvalid())
|
||||
{
|
||||
waaaRetries = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
String tokenizeSongInfo(String tkn, String sinfo){
|
||||
int searchResult;
|
||||
String rtn;
|
||||
if (tkn=="Bitrate"){
|
||||
for (int i = 0; i < 5; i++) {
|
||||
rtn = getToken(sinfo, " ", i);
|
||||
searchResult = strsearch(rtn, "kbps");
|
||||
if (searchResult>0) return StrMid(rtn, 0, searchResult);
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
if (tkn=="Channels"){
|
||||
for (int i = 0; i < 5; i++) {
|
||||
rtn = getToken(sinfo, " ", i);
|
||||
searchResult = strsearch(rtn, "tereo");
|
||||
if (searchResult>0) return "stereo";
|
||||
searchResult = strsearch(rtn, "ono");
|
||||
if (searchResult>0) return "mono";
|
||||
// Martin: surround > 3, stereo = 2,3
|
||||
searchResult = strsearch(rtn, "annels");
|
||||
if (searchResult>0)
|
||||
{
|
||||
int pos = strsearch(getSongInfoText(), "annels");
|
||||
pos = stringToInteger(strmid(getSongInfoText(), pos - 4, 1));
|
||||
if (pos > 3) return "surround";
|
||||
if (pos > 1 && pos < 4) return "stereo";
|
||||
else return "mono";
|
||||
}
|
||||
}
|
||||
return "none";
|
||||
}
|
||||
|
||||
if (tkn=="Frequency"){
|
||||
for (int i = 0; i < 5; i++) {
|
||||
rtn = getToken(sinfo, " ", i);
|
||||
searchResult = strsearch(strlower(rtn), "khz");
|
||||
if (searchResult>0) {
|
||||
String r = StrMid(rtn, 0, searchResult);
|
||||
int dot = StrSearch(r, ".");
|
||||
if (dot == -1) dot = StrSearch(r, ",");
|
||||
if (dot != -1) return StrMid(r, 0, dot);
|
||||
return r;
|
||||
}
|
||||
|
||||
}
|
||||
return "";
|
||||
}
|
||||
else return "";
|
||||
}
|
||||
|
||||
getSonginfo(String SongInfoString) {
|
||||
String tkn;
|
||||
|
||||
tkn = tokenizeSongInfo("Bitrate", SongInfoString);
|
||||
if(tkn != "") {bitrateText.setText("["+tkn+"]");}
|
||||
|
||||
tkn = tokenizeSongInfo("Channels", SongInfoString);
|
||||
channelDisplay.setXmlParam("image", "player.songinfo." + tkn);
|
||||
|
||||
tkn = tokenizeSongInfo("Frequency", SongInfoString);
|
||||
if(tkn != "") {frequencyText.setText("["+tkn+"]");}
|
||||
}
|
BIN
Src/resources/skins/Winamp Modern/scripts/songinfo.maki
Normal file
BIN
Src/resources/skins/Winamp Modern/scripts/songinfo.maki
Normal file
Binary file not shown.
68
Src/resources/skins/Winamp Modern/scripts/standardframe.m
Normal file
68
Src/resources/skins/Winamp Modern/scripts/standardframe.m
Normal file
|
@ -0,0 +1,68 @@
|
|||
#include <lib/std.mi>
|
||||
|
||||
Global Group frameGroup, content, titlebar;
|
||||
Global String x, y, w, h, rx, ry, rw, rh;
|
||||
Global Layer mouselayer;
|
||||
Global Button Sysmenu;
|
||||
|
||||
Function setNewGroup(String groupid);
|
||||
|
||||
System.onScriptLoaded() {
|
||||
frameGroup = getScriptGroup();
|
||||
String param = getParam();
|
||||
x = getToken(param, ",", 0);
|
||||
y = getToken(param, ",", 1);
|
||||
w = getToken(param, ",", 2);
|
||||
h = getToken(param, ",", 3);
|
||||
rx = getToken(param, ",", 4);
|
||||
ry = getToken(param, ",", 5);
|
||||
rw = getToken(param, ",", 6);
|
||||
rh = getToken(param, ",", 7);
|
||||
sysmenu = frameGroup.findObject("sysmenu");
|
||||
}
|
||||
|
||||
System.onSetXuiParam(String param, String value) {
|
||||
if (param == "content") {
|
||||
setNewGroup(value);
|
||||
titlebar = frameGroup.findObject("wasabi.titlebar");
|
||||
mouselayer = titlebar.findObject("mousetrap");
|
||||
}
|
||||
if (param == "padtitleright" || param == "padtitleleft") {
|
||||
if (titlebar != NULL) titlebar.setXmlParam(param, value);
|
||||
}
|
||||
if (param == "shade") {
|
||||
if (mouselayer != NULL) mouselayer.setXmlParam("dblclickaction", "switch;"+value);
|
||||
else messagebox("Cannot set shade parameter for StandardFrame object, no mousetrap found", "Skin Error", 0, "");
|
||||
}
|
||||
}
|
||||
|
||||
// backward compatibility for prerelease notify trick
|
||||
frameGroup.onNotify(String cmd, String param, int a, int b) {
|
||||
String _command = getToken(cmd, ",", 0);
|
||||
String _param = getToken(cmd, ",", 1);
|
||||
if (_command == "content" || _command == "padtitleright" || _command == "padtitleleft" || _command == "shade") {
|
||||
onSetXuiParam(_command, _param);
|
||||
}
|
||||
}
|
||||
|
||||
setNewGroup(String groupid) {
|
||||
content = newGroup(groupid);
|
||||
if (content == NULL) {
|
||||
messagebox("group \"" + groupid + "\" not found", "ButtonGroup", 0, "");
|
||||
return;
|
||||
}
|
||||
content.setXmlParam("x", x);
|
||||
content.setXmlParam("y", y);
|
||||
content.setXmlParam("w", w);
|
||||
content.setXmlParam("h", h);
|
||||
content.setXmlParam("relatx", rx);
|
||||
content.setXmlParam("relaty", ry);
|
||||
content.setXmlParam("relatw", rw);
|
||||
content.setXmlParam("relath", rh);
|
||||
content.init(frameGroup);
|
||||
}
|
||||
|
||||
Sysmenu.onLeftClick() {
|
||||
LayoutStatus _status = frameGroup.findObject("sysmenu.status");
|
||||
_status.callme("{system}");
|
||||
}
|
BIN
Src/resources/skins/Winamp Modern/scripts/standardframe.maki
Normal file
BIN
Src/resources/skins/Winamp Modern/scripts/standardframe.maki
Normal file
Binary file not shown.
104
Src/resources/skins/Winamp Modern/scripts/titlebar.m
Normal file
104
Src/resources/skins/Winamp Modern/scripts/titlebar.m
Normal file
|
@ -0,0 +1,104 @@
|
|||
#include <lib/std.mi>
|
||||
|
||||
#define MARGIN 0
|
||||
|
||||
Function resizeObjects();
|
||||
|
||||
Global GuiObject left, right, center;
|
||||
Global Text tcenter;
|
||||
Global Layer lcenter;
|
||||
Global Group sg;
|
||||
Global int padleft, padright;
|
||||
|
||||
System.onScriptLoaded() {
|
||||
|
||||
padleft = 0;
|
||||
padright = 0;
|
||||
|
||||
sg = getScriptGroup();
|
||||
|
||||
if (sg == NULL) {
|
||||
messageBox("titlebar.maki can only run within a group", "Error", 0, "");
|
||||
return;
|
||||
}
|
||||
|
||||
left = sg.findObject(getToken(getParam(), ";", 0));
|
||||
center = sg.findObject(getToken(getParam(), ";", 1));
|
||||
if (center != NULL) {
|
||||
tcenter = center.findObject("window.titlebar.title");
|
||||
lcenter = center.findObject("window.titlebar.title.overlay");
|
||||
}
|
||||
right = sg.findObject(getToken(getParam(), ";", 2));
|
||||
}
|
||||
|
||||
// backward compatibility with prerelease notify trick
|
||||
sg.onNotify(String cmd, String param, int a, int b) {
|
||||
String _command = getToken(cmd, ",", 0);
|
||||
String _param = getToken(cmd, ",", 1);
|
||||
if (_command == "padtitleright" || _command == "padtitleright")
|
||||
onSetXuiParam(_command, _param);
|
||||
}
|
||||
|
||||
System.onSetXuiParam(String param, String value) {
|
||||
if (param == "padtitleright") {
|
||||
padright = padright + StringToInteger(value);
|
||||
resizeObjects();
|
||||
}
|
||||
if (param == "padtitleleft") {
|
||||
padleft = padleft + StringToInteger(value);
|
||||
resizeObjects();
|
||||
}
|
||||
}
|
||||
|
||||
resizeObjects() {
|
||||
int text_width = 0;
|
||||
int layout_width = 0;
|
||||
int group_width = sg.getWidth();
|
||||
|
||||
Layout l = sg.getParentLayout();
|
||||
layout_width = l.getWidth();
|
||||
|
||||
if (center != NULL) {
|
||||
text_width = center.getAutoWidth();
|
||||
}
|
||||
|
||||
int lx = (layout_width - text_width) / 2;
|
||||
lx = l.clientToScreenX(lx);
|
||||
lx = sg.screenToClientX(lx);
|
||||
lx = lx - sg.getLeft();
|
||||
|
||||
if (center != NULL) {
|
||||
center.setXmlParam("x", IntegerToString(lx));
|
||||
center.setXmlParam("relatx", "0");
|
||||
center.setXmlParam("w", IntegerToString(text_width));
|
||||
center.setXmlParam("relatw", "0");
|
||||
|
||||
lcenter.setXmlParam("x", IntegerToString(lx));
|
||||
lcenter.setXmlParam("relatx", "0");
|
||||
lcenter.setXmlParam("w", IntegerToString(text_width));
|
||||
lcenter.setXmlParam("relatw", "0");
|
||||
|
||||
}
|
||||
|
||||
if (left != NULL) {
|
||||
left.setXmlParam("x", IntegerToString(padleft));
|
||||
left.setXmlParam("relatx", "0");
|
||||
left.setXmlParam("w", IntegerToString(lx-padleft-MARGIN));
|
||||
left.setXmlParam("relatw", "0");
|
||||
}
|
||||
if (right != NULL) {
|
||||
right.setXmlParam("x", IntegerToString(lx+text_width+MARGIN+1));
|
||||
right.setXmlParam("relatx", "0");
|
||||
right.setXmlParam("w", "-" + IntegerToString(lx+text_width+1+padright+MARGIN+1)); //IntegerToString(group_width-(lx+text_width)));
|
||||
right.setXmlParam("relatw", "1");
|
||||
}
|
||||
}
|
||||
|
||||
tcenter.onTextChanged(string newtext) {
|
||||
resizeObjects();
|
||||
}
|
||||
|
||||
sg.onResize(int x, int y, int w, int h) {
|
||||
resizeObjects();
|
||||
}
|
||||
|
BIN
Src/resources/skins/Winamp Modern/scripts/titlebar.maki
Normal file
BIN
Src/resources/skins/Winamp Modern/scripts/titlebar.maki
Normal file
Binary file not shown.
15
Src/resources/skins/Winamp Modern/scripts/video.m
Normal file
15
Src/resources/skins/Winamp Modern/scripts/video.m
Normal file
|
@ -0,0 +1,15 @@
|
|||
#include <lib/std.mi>
|
||||
#include "attribs.m"
|
||||
|
||||
Global Button btnVideoReattach;
|
||||
|
||||
System.onScriptLoaded() {
|
||||
initAttribs();
|
||||
BtnVideoReattach = getScriptGroup().findObject("button.video.reattach");
|
||||
}
|
||||
|
||||
BtnVideoReattach.onLeftClick() {
|
||||
Container c = getContainer("main");
|
||||
if (c.getLayout("shade").isVisible()) c.switchToLayout("normal");
|
||||
video_detach_attrib.setData("0");
|
||||
}
|
BIN
Src/resources/skins/Winamp Modern/scripts/video.maki
Normal file
BIN
Src/resources/skins/Winamp Modern/scripts/video.maki
Normal file
Binary file not shown.
313
Src/resources/skins/Winamp Modern/scripts/videoavs.m
Normal file
313
Src/resources/skins/Winamp Modern/scripts/videoavs.m
Normal file
|
@ -0,0 +1,313 @@
|
|||
#include <lib/std.mi>
|
||||
#include <lib/config.mi>
|
||||
|
||||
#define MAIN_ATTRIBS_MGR
|
||||
|
||||
Function updateVisCmd();
|
||||
Function updateOpenCloseDirection();
|
||||
|
||||
// this implements the main app drawer
|
||||
#include "drawer.m"
|
||||
|
||||
// this loads the skin config attributes definitions
|
||||
#include "attribs.m"
|
||||
|
||||
Global Layout main, shade;
|
||||
Global Container maincontainer;
|
||||
Global Group frameGroup, ButtonsVideo,ButtonsVis,ButtonsVideoDetach,ButtonsVisDetach,ButtonsVideoSwitchto,ButtonsVisSwitchto;
|
||||
Global Button btnOpen,btnClose,btnMaximize,btnRestore, btnVisDetach, btnVideoDetach, btnVisSwitchto, btnVideoSwitchto;
|
||||
Global Layer resizer,resizerDrawer,OpenCloseHider;
|
||||
Global GuiObject VideoVisGroup;
|
||||
Global Int evershown;
|
||||
Global Int ismaximized;
|
||||
Global Int lasttotop;
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
// script startup
|
||||
//------------------------------------------------------------------------
|
||||
System.onScriptLoaded() {
|
||||
// init skin attributes for this script
|
||||
|
||||
initAttribs();
|
||||
|
||||
// bind objects
|
||||
|
||||
frameGroup = getScriptGroup();
|
||||
btnOpen = frameGroup.findObject("videoavs.open");
|
||||
btnClose = frameGroup.findObject("videoavs.close");
|
||||
btnMaximize = frameGroup.findObject("button.vid.max");
|
||||
btnRestore = frameGroup.findObject("button.vid.restore");
|
||||
resizer = frameGroup.findObject("player.main.resizer");
|
||||
resizerDrawer = frameGroup.findObject("drawer.resizer");
|
||||
|
||||
ButtonsVideo = frameGroup.findObject("buttons.video");
|
||||
ButtonsVis = frameGroup.findObject("buttons.vis");
|
||||
|
||||
ButtonsVideoDetach = frameGroup.findObject("buttons.video.detach");
|
||||
ButtonsVisDetach = frameGroup.findObject("buttons.vis.detach");
|
||||
BtnVisDetach = ButtonsVisDetach.findObject("button.vis.detach");
|
||||
BtnVideoDetach = ButtonsVideoDetach.findObject("button.vid.detach");
|
||||
|
||||
ButtonsVideoSwitchto = frameGroup.findObject("buttons.video.switchto");
|
||||
ButtonsVisSwitchto = frameGroup.findObject("buttons.vis.switchto");
|
||||
|
||||
BtnVisSwitchto = ButtonsVisSwitchto.findObject("button.vis.Switchto");
|
||||
BtnVideoSwitchto = ButtonsVideoSwitchto.findObject("button.vid.Switchto");
|
||||
|
||||
OpenCloseHider=frameGroup.findObject("openclosehider");
|
||||
|
||||
main = frameGroup.getParentLayout();
|
||||
maincontainer = main.getContainer();
|
||||
VideoVisGroup = frameGroup.findObject("AVSGroup");
|
||||
|
||||
VideoVisGroup.hide();
|
||||
|
||||
// bind drawer script attribs to our attribs
|
||||
|
||||
__drawer_directiontop_attrib = drawer_directiontop_attrib;
|
||||
__scrolldrawerattrib = scrolldrawerattrib;
|
||||
__drawer_directionbypass_attrib = drawer_directionbypass_attrib;
|
||||
__vis_detach_attrib = vis_detach_attrib;
|
||||
__video_detach_attrib = video_detach_attrib;
|
||||
|
||||
// startup drawer script
|
||||
|
||||
initDrawer(main, "VideoAVS");
|
||||
|
||||
// more init
|
||||
|
||||
if (vis_detach_attrib.getData() == "1" && video_detach_attrib.getData() == "1") OpenCloseHider.show();
|
||||
else OpenCloseHider.hide();
|
||||
|
||||
lasttotop = 0;
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
// grab a handle to the windowshade layout, can't get it in onScriptLoaded since it doesn't exists yet
|
||||
// also, first time we are shown, we update the viscmd button's action
|
||||
//------------------------------------------------------------------------
|
||||
main.onSetVisible(int show) {
|
||||
if (!evershown) {
|
||||
evershown = 1;
|
||||
if (!shade) {
|
||||
shade = maincontainer.getLayout("shade");
|
||||
}
|
||||
updateVisCmd();
|
||||
updateOpenCloseDirection();
|
||||
}
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
// script shutdown
|
||||
//------------------------------------------------------------------------
|
||||
System.onScriptUnloading() {
|
||||
|
||||
// shutdown the drawer script
|
||||
|
||||
shutdownDrawer();
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
// drawer script backend
|
||||
//------------------------------------------------------------------------
|
||||
|
||||
Int getDrawerClosedHeight() {
|
||||
return 280; // this is the size of the layout when the drawer is closed
|
||||
}
|
||||
|
||||
Int getDefaultDrawerOpenHeight() {
|
||||
return 510; // this is the default size of the layout, used when it opens the first time
|
||||
}
|
||||
|
||||
// whenever the main window is resized while its drawer is closed, we change the height of the drawer the
|
||||
// next time it opens so that video will fit 4:3
|
||||
Int getDrawerOpenAutoHeight(int layoutwidth) {
|
||||
return (layoutwidth-6)*(3/4)+55+270;
|
||||
}
|
||||
|
||||
WindowHolder getVisWindowHolder() {
|
||||
WindowHolder wh = getScriptGroup().findObject("myviswnd");
|
||||
return wh; // we return our vis windowholder object
|
||||
}
|
||||
|
||||
WindowHolder getVideoWindowHolder() {
|
||||
WindowHolder wh = getScriptGroup().findObject("myvideownd");
|
||||
return wh; // we return our video windowholder object
|
||||
}
|
||||
|
||||
//------------------------------------------------------------------------
|
||||
// optional drawer events
|
||||
//------------------------------------------------------------------------
|
||||
|
||||
onDoneOpeningDrawer() {
|
||||
// nothing to do
|
||||
}
|
||||
|
||||
onDoneClosingDrawer() {
|
||||
VideoVisGroup.hide();
|
||||
}
|
||||
|
||||
onBeforeOpeningDrawer() {
|
||||
resizer.setXmlParam("resize", "bottomright");
|
||||
resizerDrawer.setXmlParam("resize", "bottomright");
|
||||
btnOpen.hide();
|
||||
main.setXmlParam("minimum_h", "380");
|
||||
|
||||
VideoVisGroup.show();
|
||||
}
|
||||
|
||||
onBeforeClosingDrawer() {
|
||||
resizer.setXmlParam("resize", "right");
|
||||
resizerDrawer.setXmlParam("resize", "right");
|
||||
main.setXmlParam("minimum_h", "280");
|
||||
btnOpen.show();
|
||||
}
|
||||
|
||||
onShowVis() {
|
||||
ButtonsVideo.hide();
|
||||
ButtonsVideoDetach.hide();
|
||||
ButtonsVideoSwitchto.hide();
|
||||
ButtonsVis.show();
|
||||
ButtonsVisDetach.show();
|
||||
if (video_detach_attrib.getData() == "0") ButtonsVisSwitchto.show();
|
||||
}
|
||||
|
||||
onHideVis() {
|
||||
ButtonsVis.hide();
|
||||
ButtonsVisDetach.hide();
|
||||
ButtonsVisSwitchto.hide();
|
||||
}
|
||||
|
||||
onShowVideo() {
|
||||
ButtonsVis.hide();
|
||||
ButtonsVisDetach.hide();
|
||||
ButtonsVisSwitchto.hide();
|
||||
ButtonsVideo.show();
|
||||
ButtonsVideoDetach.show();
|
||||
if (vis_detach_attrib.getData() == "0") ButtonsVideoSwitchto.show();
|
||||
}
|
||||
|
||||
onHideVideo() {
|
||||
ButtonsVideo.hide();
|
||||
ButtonsVideoDetach.hide();
|
||||
ButtonsVideoSwitchto.hide();
|
||||
}
|
||||
|
||||
onDetachVideo() {
|
||||
ButtonsVisSwitchto.hide();
|
||||
if (vis_detach_attrib.getData() == "1") OpenCloseHider.show();
|
||||
}
|
||||
|
||||
onAttachVideo() {
|
||||
ButtonsVisSwitchto.show();
|
||||
OpenCloseHider.hide();
|
||||
}
|
||||
|
||||
onDetachVis() {
|
||||
ButtonsVideoSwitchto.hide();
|
||||
if (video_detach_attrib.getData() == "1") OpenCloseHider.show();
|
||||
}
|
||||
|
||||
onAttachVis() {
|
||||
ButtonsVideoSwitchto.show();
|
||||
OpenCloseHider.hide();
|
||||
}
|
||||
|
||||
onBeforeRestore() {
|
||||
btnMaximize.show();
|
||||
btnRestore.hide();
|
||||
}
|
||||
|
||||
onBeforeMaximize() {
|
||||
btnRestore.show();
|
||||
btnMaximize.hide();
|
||||
}
|
||||
|
||||
onCancelMaximize() {
|
||||
btnMaximize.show();
|
||||
btnRestore.hide();
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------
|
||||
// drawer control
|
||||
// -----------------------------------------------------------------------
|
||||
|
||||
btnOpen.onLeftClick() {
|
||||
openDrawer();
|
||||
}
|
||||
|
||||
btnClose.onLeftClick() {
|
||||
closeDrawer();
|
||||
}
|
||||
|
||||
btnMaximize.onLeftClick() {
|
||||
maximizeWindow();
|
||||
}
|
||||
|
||||
btnRestore.onLeftClick() {
|
||||
restoreWindow();
|
||||
}
|
||||
|
||||
BtnVisDetach.onLeftClick() {
|
||||
detachVis();
|
||||
}
|
||||
|
||||
BtnVideoDetach.onLeftClick() {
|
||||
detachVideo();
|
||||
}
|
||||
|
||||
BtnVisSwitchto.onLeftClick() {
|
||||
switchToVideo();
|
||||
}
|
||||
|
||||
BtnVideoSwitchto.onLeftClick() {
|
||||
switchToVis();
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------
|
||||
// when the player window is moved on the screen, we should update the up/down arrow for the open/close buttons since the
|
||||
// drawer may have changed the direction it will open depending on user settings
|
||||
// -----------------------------------------------------------------------
|
||||
main.onMove() {
|
||||
updateOpenCloseDirection();
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------
|
||||
// just invert the images when the direction is to top and restore them otherwise
|
||||
// -----------------------------------------------------------------------
|
||||
updateOpenCloseDirection() {
|
||||
if (isDrawerToTop()) {
|
||||
if (!lasttotop) {
|
||||
btnClose.setXmlParam("image", "player.button.videoavs");
|
||||
btnClose.setXmlParam("downimage", "player.button.videoavs.pressed");
|
||||
btnClose.setXmlParam("hoverImage", "player.button.videoavs.hover");
|
||||
btnOpen.setXmlParam("image", "player.button.videoavs.up");
|
||||
btnOpen.setXmlParam("downimage", "player.button.videoavs.up.pressed");
|
||||
btnOpen.setXmlParam("hoverImage", "player.button.videoavs.up.hover");
|
||||
lasttotop = 1;
|
||||
}
|
||||
} else {
|
||||
if (lasttotop) {
|
||||
btnOpen.setXmlParam("image", "player.button.videoavs");
|
||||
btnOpen.setXmlParam("downimage", "player.button.videoavs.pressed");
|
||||
btnOpen.setXmlParam("hoverImage", "player.button.videoavs.hover");
|
||||
btnClose.setXmlParam("image", "player.button.videoavs.up");
|
||||
btnClose.setXmlParam("downimage", "player.button.videoavs.up.pressed");
|
||||
btnClose.setXmlParam("hoverImage", "player.button.videoavs.up.hover");
|
||||
lasttotop = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------
|
||||
updateVisCmd() {
|
||||
Button btn = getScriptGroup().findObject("button.vis.misc");
|
||||
if (btn) {
|
||||
if (viscmd_menu_attrib.getData() == "1") {
|
||||
btn.setXmlParam("action", "Vis_Menu");
|
||||
} else {
|
||||
btn.setXmlParam("action", "Vis_Cfg");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
BIN
Src/resources/skins/Winamp Modern/scripts/videoavs.maki
Normal file
BIN
Src/resources/skins/Winamp Modern/scripts/videoavs.maki
Normal file
Binary file not shown.
42
Src/resources/skins/Winamp Modern/scripts/vis.m
Normal file
42
Src/resources/skins/Winamp Modern/scripts/vis.m
Normal file
|
@ -0,0 +1,42 @@
|
|||
#include <lib/std.mi>
|
||||
#include "attribs.m"
|
||||
|
||||
Function updateVisCmd();
|
||||
|
||||
Global Button btnVisReattach;
|
||||
Global Layout thislayout;
|
||||
Global Int evershown;
|
||||
|
||||
System.onScriptLoaded() {
|
||||
initAttribs();
|
||||
thislayout = getScriptGroup().getParentLayout();
|
||||
BtnVisReattach = getScriptGroup().findObject("button.vis.reattach");
|
||||
}
|
||||
|
||||
thisLayout.onSetVisible(int show) {
|
||||
if (!evershown) {
|
||||
evershown = 1;
|
||||
updateVisCmd();
|
||||
}
|
||||
}
|
||||
|
||||
BtnVisReattach.onLeftClick() {
|
||||
Container c = getContainer("main");
|
||||
if (c.getLayout("shade").isVisible()) c.switchToLayout("normal");
|
||||
vis_detach_attrib.setData("0");
|
||||
}
|
||||
|
||||
viscmd_menu_attrib.onDataChanged() {
|
||||
updateVisCmd();
|
||||
}
|
||||
|
||||
updateVisCmd() {
|
||||
Button btn = getScriptGroup().findObject("button.vis.misc");
|
||||
if (btn) {
|
||||
if (viscmd_menu_attrib.getData() == "1") {
|
||||
btn.setXmlParam("action", "Vis_Menu");
|
||||
} else {
|
||||
btn.setXmlParam("action", "Vis_Cfg");
|
||||
}
|
||||
}
|
||||
}
|
BIN
Src/resources/skins/Winamp Modern/scripts/vis.maki
Normal file
BIN
Src/resources/skins/Winamp Modern/scripts/vis.maki
Normal file
Binary file not shown.
267
Src/resources/skins/Winamp Modern/scripts/visualizer.m
Normal file
267
Src/resources/skins/Winamp Modern/scripts/visualizer.m
Normal file
|
@ -0,0 +1,267 @@
|
|||
/*---------------------------------------------------
|
||||
-----------------------------------------------------
|
||||
Filename: visualizer.m
|
||||
Version: 1.4
|
||||
|
||||
Type: maki
|
||||
Date: 07. Okt. 2007 - 19:56
|
||||
Author: Martin Poehlmann aka Deimos
|
||||
E-Mail: martin@skinconsortium.com
|
||||
Internet: www.skinconsortium.com
|
||||
www.martin.deimos.de.vu
|
||||
|
||||
Note: This script handles also the timer reflection
|
||||
-----------------------------------------------------
|
||||
---------------------------------------------------*/
|
||||
|
||||
#include <lib/std.mi>
|
||||
|
||||
Function refreshVisSettings();
|
||||
Function setVis (int mode);
|
||||
Function ProcessMenuResult (int a);
|
||||
|
||||
Global Group scriptGroup;
|
||||
Global Vis visualizer;
|
||||
Global Text tmr;
|
||||
|
||||
Global PopUpMenu visMenu;
|
||||
Global PopUpMenu specmenu;
|
||||
Global PopUpMenu oscmenu;
|
||||
Global PopUpMenu pksmenu;
|
||||
Global PopUpMenu anamenu;
|
||||
Global PopUpMenu stylemenu;
|
||||
|
||||
Global Int currentMode, a_falloffspeed, p_falloffspeed, a_coloring;
|
||||
Global Boolean show_peaks, isShade;
|
||||
Global layer trigger;
|
||||
|
||||
Global Layout thislayout;
|
||||
Global Container main;
|
||||
|
||||
System.onScriptLoaded()
|
||||
{
|
||||
scriptGroup = getScriptGroup();
|
||||
thislayout = scriptGroup.getParentLayout();
|
||||
main = thislayout.getContainer();
|
||||
|
||||
visualizer = scriptGroup.findObject("visual");
|
||||
|
||||
trigger = scriptGroup.findObject("main.vis.trigger");
|
||||
|
||||
visualizer.setXmlParam("peaks", integerToString(show_peaks));
|
||||
visualizer.setXmlParam("peakfalloff", integerToString(p_falloffspeed));
|
||||
visualizer.setXmlParam("falloff", integerToString(a_falloffspeed));
|
||||
|
||||
refreshVisSettings ();
|
||||
}
|
||||
|
||||
refreshVisSettings ()
|
||||
{
|
||||
currentMode = getPrivateInt(getSkinName(), "Visualizer Mode", 1);
|
||||
show_peaks = getPrivateInt(getSkinName(), "Visualizer show Peaks", 1);
|
||||
a_falloffspeed = getPrivateInt(getSkinName(), "Visualizer analyzer falloff", 3);
|
||||
p_falloffspeed = getPrivateInt(getSkinName(), "Visualizer peaks falloff", 2);
|
||||
a_coloring = getPrivateInt(getSkinName(), "Visualizer analyzer coloring", 0);
|
||||
|
||||
visualizer.setXmlParam("peaks", integerToString(show_peaks));
|
||||
visualizer.setXmlParam("peakfalloff", integerToString(p_falloffspeed));
|
||||
visualizer.setXmlParam("falloff", integerToString(a_falloffspeed));
|
||||
|
||||
if (a_coloring == 0)
|
||||
{
|
||||
visualizer.setXmlParam("coloring", "Normal");
|
||||
}
|
||||
else if (a_coloring == 1)
|
||||
{
|
||||
visualizer.setXmlParam("coloring", "Normal");
|
||||
}
|
||||
else if (a_coloring == 2)
|
||||
{
|
||||
visualizer.setXmlParam("coloring", "Fire");
|
||||
}
|
||||
else if (a_coloring == 3)
|
||||
{
|
||||
visualizer.setXmlParam("coloring", "Line");
|
||||
}
|
||||
|
||||
setVis (currentMode);
|
||||
}
|
||||
|
||||
trigger.onLeftButtonDown (int x, int y)
|
||||
{
|
||||
if (isKeyDown(VK_ALT) && isKeyDown(VK_SHIFT) && isKeyDown(VK_CONTROL))
|
||||
{
|
||||
if (visualizer.getXmlParam("fliph") == "1")
|
||||
{
|
||||
visualizer.setXmlParam("fliph", "0");
|
||||
}
|
||||
else
|
||||
{
|
||||
visualizer.setXmlParam("fliph", "1");
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
currentMode++;
|
||||
|
||||
if (currentMode == 6)
|
||||
{
|
||||
currentMode = 0;
|
||||
}
|
||||
|
||||
setVis (currentMode);
|
||||
complete;
|
||||
}
|
||||
|
||||
trigger.onRightButtonUp (int x, int y)
|
||||
{
|
||||
visMenu = new PopUpMenu;
|
||||
specmenu = new PopUpMenu;
|
||||
oscmenu = new PopUpMenu;
|
||||
pksmenu = new PopUpMenu;
|
||||
anamenu = new PopUpMenu;
|
||||
stylemenu = new PopUpMenu;
|
||||
|
||||
visMenu.addCommand("Presets:", 999, 0, 1);
|
||||
visMenu.addCommand("No Visualization", 100, currentMode == 0, 0);
|
||||
specmenu.addCommand("Thick Bands", 1, currentMode == 1, 0);
|
||||
specmenu.addCommand("Thin Bands", 2, currentMode == 2, 0);
|
||||
visMenu.addSubMenu(specmenu, "Spectrum Analyzer");
|
||||
|
||||
oscmenu.addCommand("Solid", 3, currentMode == 3, 0);
|
||||
oscmenu.addCommand("Dots", 4, currentMode == 4, 0);
|
||||
oscmenu.addCommand("Lines", 5, currentMode == 5, 0);
|
||||
visMenu.addSubMenu(oscmenu, "Oscilloscope");
|
||||
|
||||
visMenu.addSeparator();
|
||||
visMenu.addCommand("Options:", 102, 0, 1);
|
||||
visMenu.addCommand("Show Peaks", 101, show_peaks == 1, 0);
|
||||
pksmenu.addCommand("Slower", 200, p_falloffspeed == 0, 0);
|
||||
pksmenu.addCommand("Slow", 201, p_falloffspeed == 1, 0);
|
||||
pksmenu.addCommand("Moderate", 202, p_falloffspeed == 2, 0);
|
||||
pksmenu.addCommand("Fast", 203, p_falloffspeed == 3, 0);
|
||||
pksmenu.addCommand("Faster", 204, p_falloffspeed == 4, 0);
|
||||
visMenu.addSubMenu(pksmenu, "Peak Falloff Speed");
|
||||
anamenu.addCommand("Slower", 300, a_falloffspeed == 0, 0);
|
||||
anamenu.addCommand("Slow", 301, a_falloffspeed == 1, 0);
|
||||
anamenu.addCommand("Moderate", 302, a_falloffspeed == 2, 0);
|
||||
anamenu.addCommand("Fast", 303, a_falloffspeed == 3, 0);
|
||||
anamenu.addCommand("Faster", 304, a_falloffspeed == 4, 0);
|
||||
visMenu.addSubMenu(anamenu, "Analyzer Falloff Speed");
|
||||
stylemenu.addCommand("Normal", 400, a_coloring == 0, 0);
|
||||
stylemenu.addCommand("Fire", 402, a_coloring == 2, 0);
|
||||
stylemenu.addCommand("Line", 403, a_coloring == 3, 0);
|
||||
//visMenu.addSubMenu(stylemenu, "Analyzer Coloring");
|
||||
|
||||
ProcessMenuResult (visMenu.popAtMouse());
|
||||
|
||||
delete visMenu;
|
||||
delete specmenu;
|
||||
delete oscmenu;
|
||||
delete pksmenu;
|
||||
delete anamenu;
|
||||
delete stylemenu;
|
||||
|
||||
complete;
|
||||
}
|
||||
|
||||
ProcessMenuResult (int a)
|
||||
{
|
||||
if (a < 1) return;
|
||||
|
||||
if (a > 0 && a <= 6 || a == 100)
|
||||
{
|
||||
if (a == 100) a = 0;
|
||||
setVis(a);
|
||||
}
|
||||
|
||||
else if (a == 101)
|
||||
{
|
||||
show_peaks = (show_peaks - 1) * (-1);
|
||||
visualizer.setXmlParam("peaks", integerToString(show_peaks));
|
||||
setPrivateInt(getSkinName(), "Visualizer show Peaks", show_peaks);
|
||||
}
|
||||
|
||||
else if (a >= 200 && a <= 204)
|
||||
{
|
||||
p_falloffspeed = a - 200;
|
||||
visualizer.setXmlParam("peakfalloff", integerToString(p_falloffspeed));
|
||||
setPrivateInt(getSkinName(), "Visualizer peaks falloff", p_falloffspeed);
|
||||
}
|
||||
|
||||
else if (a >= 300 && a <= 304)
|
||||
{
|
||||
a_falloffspeed = a - 300;
|
||||
visualizer.setXmlParam("falloff", integerToString(a_falloffspeed));
|
||||
setPrivateInt(getSkinName(), "Visualizer analyzer falloff", a_falloffspeed);
|
||||
}
|
||||
|
||||
else if (a >= 400 && a <= 403)
|
||||
{
|
||||
a_coloring = a - 400;
|
||||
if (a_coloring == 0)
|
||||
{
|
||||
visualizer.setXmlParam("coloring", "Normal");
|
||||
}
|
||||
else if (a_coloring == 1)
|
||||
{
|
||||
visualizer.setXmlParam("coloring", "Normal");
|
||||
}
|
||||
else if (a_coloring == 2)
|
||||
{
|
||||
visualizer.setXmlParam("coloring", "Fire");
|
||||
}
|
||||
else if (a_coloring == 3)
|
||||
{
|
||||
visualizer.setXmlParam("coloring", "Line");
|
||||
}
|
||||
setPrivateInt(getSkinName(), "Visualizer analyzer coloring", a_coloring);
|
||||
}
|
||||
}
|
||||
|
||||
setVis (int mode)
|
||||
{
|
||||
setPrivateInt(getSkinName(), "Visualizer Mode", mode);
|
||||
if (mode == 0)
|
||||
{
|
||||
visualizer.setMode(0);
|
||||
}
|
||||
else if (mode == 1)
|
||||
{
|
||||
visualizer.setXmlParam("bandwidth", "wide");
|
||||
visualizer.setMode(1);
|
||||
}
|
||||
else if (mode == 2)
|
||||
{
|
||||
visualizer.setXmlParam("bandwidth", "thin");
|
||||
visualizer.setMode(1);
|
||||
}
|
||||
else if (mode == 3)
|
||||
{
|
||||
visualizer.setXmlParam("oscstyle", "solid");
|
||||
visualizer.setMode(2);
|
||||
}
|
||||
else if (mode == 4)
|
||||
{
|
||||
visualizer.setXmlParam("oscstyle", "dots");
|
||||
visualizer.setMode(2);
|
||||
}
|
||||
else if (mode == 5)
|
||||
{
|
||||
visualizer.setXmlParam("oscstyle", "lines");
|
||||
visualizer.setMode(2);
|
||||
}
|
||||
currentMode = mode;
|
||||
}
|
||||
|
||||
// Sync Normal and Shade Layout
|
||||
|
||||
main.onBeforeSwitchToLayout(Layout oldlayout, Layout newlayout)
|
||||
{
|
||||
if (newlayout != thislayout)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
refreshVisSettings();
|
||||
}
|
BIN
Src/resources/skins/Winamp Modern/scripts/visualizer.maki
Normal file
BIN
Src/resources/skins/Winamp Modern/scripts/visualizer.maki
Normal file
Binary file not shown.
Loading…
Add table
Add a link
Reference in a new issue