winamp/Src/resources/skins/Bento/scripts/pledit.m
2024-09-24 14:54:57 +02:00

619 lines
14 KiB
Objective-C

/*---------------------------------------------------
-----------------------------------------------------
Filename: pledit.m
Version: 3.1
Type: maki
Date: 18. Sep. 2007 - 19:42
Author: Martin Poehlmann aka Deimos
E-Mail: martin@skinconsortium.com
Internet: www.skinconsortium.com
www.martin.deimos.de.vu
-----------------------------------------------------
---------------------------------------------------*/
#include <lib/std.mi>
//#define DEBUG
#define FILE_NAME "pledit.m"
#include <lib/com/debug.m>
#define PL_GUID "{45F3F7C1-A6F3-4EE6-A15E-125E92FC3F8D}"
#define PLC_POPPLER_POS 200
#include "../../Big Bento/scripts/attribs/init_playlist.m"
Function fitContent (int playlistw, int playlistx);
Function fit (group g, int x, int rx, int y, int ry, int w, int rw, int h, int rh);
Function int updatePoppler(int w);
Function int updateMainPoppler(int w);
Global Frame dualwnd, pl_dualwnd, mainframe;
Global Group g_playlist, g_player, g_sui, g_buttons, g_mcv, g_cover, g_upper, wdh_pl;
Global Button p_enlarge, p_small;
Global Button p_resize;
Global int down_x, down_gx, isresizing;
Global layout normal;
Global Container player;
//Global WindowHolder wdh_pl;
Global Text pl_time;
Global Button pe_add, pe_rem, pe_sel, pe_misc, pe_manage;
Global Boolean startup, isBig, bypass_nocomp;
Global Timer dc_openPl, dc_closePl, dc_loadWnd;
Global Int COMP_Y, COMP_H, SUI_Y, SUI_H, BOTTOMSPACER, MAX_PL_H;
Global Int DEF_PL_W, SIDESPACER;
Global Int min_infowidth;
System.onScriptLoaded ()
{
initAttribs_Playlist();
normal = getScriptGroup();
player = normal.getContainer();
isBig = (getParam() == "big");
if (isBig)
{
mainframe = normal.getObject("player.mainframe.big");
}
else
{
mainframe = normal.getObject("player.mainframe");
}
dualwnd = mainframe.findObject("player.dualwnd");
g_mcv = dualwnd.findObject("player.component.fileinfo");
g_upper = dualwnd.findObject("player.component.playlist.frame");
pl_dualwnd = dualwnd.findObject("playlist.dualwnd");
g_playlist = pl_dualwnd.findObject("player.component.playlist");
g_cover = pl_dualwnd.findObject("player.component.playlist.albumart");
g_player = dualwnd.findObject("player.layout");
g_sui = normal.getObject("sui.content");
g_buttons = g_playlist.getObject("player.component.playlist.buttons");
p_enlarge = g_buttons.getObject("player.playlist.enlarge");
p_small = g_buttons.getObject("player.playlist.small");
p_resize = g_playlist.getObject("player.resize");
wdh_pl = g_playlist.getObject("playlistpro");
pl_time = g_buttons.getObject("PLTime");
pe_add = g_buttons.getObject("player.playlist.add");
pe_rem = g_buttons.getObject("player.playlist.rem");
pe_sel = g_buttons.getObject("player.playlist.sel");
pe_misc = g_buttons.getObject("player.playlist.misc");
pe_manage = g_buttons.getObject("player.playlist.manage");
min_infowidth = stringtoInteger(dualwnd.getXmlParam("maxwidth"));
dc_openPl = new Timer;
dc_openPl.setDelay(1);
dc_closePl = new Timer;
dc_closePl.setDelay(1);
dc_loadWnd = new Timer;
dc_loadWnd.setDelay(1);
// Global Definitions:
DEF_PL_W = g_playlist.getGuiW(); // (-)
SIDESPACER = g_sui.getGuiX(); // (+)
COMP_Y = mainframe.getGuiY(); // (+)
COMP_H = mainframe.getGuiH(); // (+)
SUI_Y = g_sui.getGuiY(); // (+)
SUI_H = g_sui.getGuiH(); // (-)
BOTTOMSPACER = SUI_Y + SUI_H; // (-)
MAX_PL_H = BOTTOMSPACER - COMP_Y; // (-)
startup = 1;
// show playlist album art if checked
playlist_cover_attrib.onDataChanged();
//Bento v0.8 hack
if (mainframe.getPosition() < stringToInteger(mainframe.getXmlParam("minwidth")))
{
mainframe.setPosition(stringToInteger(mainframe.getXmlParam("minwidth")));
}
}
system.onScriptUnloading ()
{
int pos = pl_dualwnd.getPosition();
if (pos > 0) setPrivateInt(getSkinName(), "playlist_cover_poppler", pos);
delete dc_loadWnd;
}
dc_loadWnd.onTimer ()
{
stop();
int pos = dualwnd.getPosition();
if (pos > 0) updatePoppler(pos);
playlist_enlarge_attrib.onDataChanged();
if (dualwnd.getPosition() > 0
#ifdef DOHIDEMCV
|| dualwnd.getXMlParam("from") == "left"
#endif
) dc_openPL.start();
else wdh_pl.hide(); //hideWa2Component(PL_GUID);
}
playlist_enlarge_attrib.onDataChanged ()
{
int pl_w = dualwnd.getPosition();
#ifdef DOHIDEMCV
if (dualwnd.getXmlParam("from") == "left")
{
pl_w = dualwnd.getWidth() - 8;
}
#endif
int pl_x = 0 - ( pl_w + SIDESPACER ); // (-)
if (getData() == "1")
{
int sui_w = pl_x - SIDESPACER; // (-)
dualwnd.setXmlParam("relath", "1");
dualwnd.setXmlParam("h", integerToString(0));
mainframe.setXmlParam("relath", "1");
mainframe.setXmlParam("h", integerToString(MAX_PL_H));
g_sui.setXmlParam("w", integerToString(sui_w-8));
int pos = getPrivateInt(getSkinName(), "playlist_cover_poppler", PLC_POPPLER_POS);
if (playlist_cover_attrib.getData() == "1" && pos > 0 && getPrivateString(getSkinName(), "Component", "Media Library") != "Hidden")
{
g_cover.show();
pl_dualwnd.setPosition (pos);
}
else
{
pl_dualwnd.setPosition (0);
g_cover.hide();
}
p_enlarge.hide();
p_small.show();
}
else
{
int sui_w = 0 - SIDESPACER - SIDESPACER; // (-)
int pc_w = pl_x - SIDESPACER; // (-)
g_cover.hide();
if (playlist_cover_attrib.getData() == "1")
{
int pos = pl_dualwnd.getPosition();
if (pos > 0) setPrivateInt(getSkinName(), "playlist_cover_poppler", pos);
}
pl_dualwnd.setPosition (0);
dualwnd.setXmlParam("h", integerToString(COMP_H-3));
dualwnd.setXmlParam("relath", "0");
mainframe.setXmlParam("h", integerToString(COMP_H));
mainframe.setXmlParam("relath", "0");
g_sui.setXmlParam("w", integerToString(sui_w));
p_enlarge.show();
p_small.hide();
}
}
g_playlist.onResize (int x, int y, int w, int h)
{
int pos = dualwnd.getPosition();
debugString(integerToString(pos), 9);
updateMainPoppler(min_infowidth - pos - 8);
if (pos > 0
#ifdef DOHIDEMCV
|| dualwnd.getXMlParam("from") == "left"
#endif
)
{
//setPrivateInt(getSkinName(), "pledit poppler width", dualwnd.getPosition());
if (!wdh_pl.isVisible())
{
setPrivateString(getSkinName(), "Pledit_pos", "top");
g_sui.sendAction("hide_comp", "pe", 0,0,0,0);
dc_openPl.start();
}
if (isBig)
{
if (w > 189)
{
pe_add.show();
pe_rem.show();
pe_sel.show();
pe_misc.show();
pe_manage.show();
}
else if (w <= 189 && w >158)
{
pe_add.show();
pe_rem.show();
pe_sel.show();
pe_misc.show();
pe_manage.hide();
}
else if (w <= 158 && w >127)
{
pe_add.show();
pe_rem.show();
pe_sel.show();
pe_misc.hide();
pe_manage.hide();
}
else if (w <= 127 && w >96)
{
pe_add.show();
pe_rem.show();
pe_sel.hide();
pe_misc.hide();
pe_manage.hide();
}
else if (w <= 96 && w >65)
{
pe_add.show();
pe_rem.hide();
pe_sel.hide();
pe_misc.hide();
pe_manage.hide();
}
else
{
pe_add.hide();
pe_rem.hide();
pe_sel.hide();
pe_misc.hide();
pe_manage.hide();
}
}
else
{
if (w > 146)
{
pe_add.show();
pe_rem.show();
pe_sel.show();
pe_misc.show();
pe_manage.show();
}
else if (w <= 146 && w >122)
{
pe_add.show();
pe_rem.show();
pe_sel.show();
pe_misc.show();
pe_manage.hide();
}
else if (w <= 122 && w >98)
{
pe_add.show();
pe_rem.show();
pe_sel.show();
pe_misc.hide();
pe_manage.hide();
}
else if (w <= 98 && w >74)
{
pe_add.show();
pe_rem.show();
pe_sel.hide();
pe_misc.hide();
pe_manage.hide();
}
else if (w <= 74 && w >50)
{
pe_add.show();
pe_rem.hide();
pe_sel.hide();
pe_misc.hide();
pe_manage.hide();
}
else
{
pe_add.hide();
pe_rem.hide();
pe_sel.hide();
pe_misc.hide();
pe_manage.hide();
}
}
}
else wdh_pl.hide();
if (playlist_enlarge_attrib.getdata() == "1")
{
int sui_w = - g_playlist.getWidth() - (2 * SIDESPACER) - 8;
g_sui.setXmlParam("w", integerToString(sui_w));
if (startup)
{
startup = 0;
mainframe.setXmlParam("relath", "1");
mainframe.setXmlParam("h", integerToString(MAX_PL_H));
dualwnd.setXmlParam("relath", "1");
dualwnd.setXmlParam("h", integerToString(0));
}
}
}
normal.onSetVisible (Boolean onoff)
{
if (onoff)
{
playlist_enlarge_attrib.onDataChanged();
int pos = dualwnd.getPosition();
if (pos > 0
#ifdef DOHIDEMCV
|| dualwnd.getXMlParam("from") == "left"
#endif
)
{
updatePoppler(pos);
dc_openPL.start();
}
else wdh_pl.hide();//hideWa2Component(PL_GUID);
}
}
normal.onUserResize (int x, int y, int w, int h)
{
int pos = dualwnd.getPosition();
if (pos > 0) updatePoppler(pos);
}
/** Hide pl_time if it cannot be full displayed */
pl_time.onResize (int x, int y, int w, int h)
{
if (w < getTextWidth())
{
hide();
}
else
{
show();
}
}
pl_time.onTextChanged (String newtxt)
{
if (getWidth() < getTextWidth())
{
hide();
}
else
{
show();
}
}
/** Playlist Component Handling */
System.onGetCancelComponent (String guid, boolean goingvisible)
{
if (getPrivateString(getSkinName(), "Pledit_pos", "top") == "sui")
{
return;
}
debugString(DEBUG_PREFIX "System.onGetCancelComponent ( "+ guid + " , " + integerToString(goingvisible) + " )", D_WTF);
if (guid == PL_GUID)
{
Boolean isShade = player.getCurLayout() != normal;
if (goingvisible == TRUE && !isShade)
{
int poppler_w = getPrivateInt(getSkinName(), "pledit poppler width", 200);
if (poppler_w < 1) poppler_w = 200;
g_playlist.show();
updatePoppler(poppler_w);
dc_openPl.start();
return FALSE;
}
else
{
if (dualwnd.getPosition() > 0) setPrivateInt(getSkinName(), "pledit poppler width", dualwnd.getPosition());
wdh_pl.hide();
dualwnd.setPosition(0);
return FALSE;
}
}
}
normal.onAction (String action, String param, Int x, int y, int p1, int p2, GuiObject source)
{
if (action == "load_comp" && strlower(param) == "pledit")
{
int poppler_w = getPrivateInt(getSkinName(), "pledit poppler width", 200);
if (dualwnd.getPosition() > 0) poppler_w = dualwnd.getPosition();
if (dualwnd.getPosition() == 0) poppler_w = 200;
updatePoppler(poppler_w);
dc_openPl.start();
}
if (action == "hide_comp" && strlower(param) == "pledit")
{
setPrivateInt(getSkinName(), "pledit poppler width", dualwnd.getPosition());
wdh_pl.hide();
dualwnd.setPosition(0);
}
if (action == "pledit_posupdate")
{
int pos = dualwnd.getPosition();
if (pos > 0) updatePoppler(pos);
}
if (action == "sui")
{
if (param == "tonocomp")
{
if (playlist_cover_attrib.getData() == "1")
{
int pos = pl_dualwnd.getPosition();
if (pos > 0) setPrivateInt(getSkinName(), "playlist_cover_poppler", pos);
}
bypass_nocomp = TRUE; //we need to add a bypass otherwise playlist_cover_attrib will be turned OFF
pl_dualwnd.setPosition (0);
g_cover.hide();
bypass_nocomp = FALSE;
}
else if (param == "fromnocomp")
{
playlist_cover_attrib.onDataChanged ();
}
}
}
dualwnd.onAction (String action, String param, Int x, int y, int p1, int p2, GuiObject source)
{
if (action == "set_maxwidth")
{
// update poppler for playlist/infocomp
updatePoppler(dualwnd.getPosition());
// update poppler bands for player/infocomp
min_infowidth = x;
updateMainPoppler(min_infowidth - dualwnd.getPosition() - 8);
}
}
wdh_pl.onSetVisible (Boolean onoff)
{
debugString("wdh_pl set visible: " + integerToString(onoff), 9);
if (onoff)
{
playlist_cover_attrib.onDataChanged();
}
else
{
int pos = pl_dualwnd.getPosition();
if (pos > 0) setPrivateInt(getSkinName(), "playlist_cover_poppler", pos);
}
}
updatePoppler(int w)
{
if (dualwnd.getPosition() == 0 && w == 0) return;
int min_w = stringToInteger(dualwnd.getXmlParam("minwidth"));
int max_w = stringToInteger(dualwnd.getXmlParam("maxwidth"));
if (max_w < 0) max_w = dualwnd.getWidth() + max_w;
debugString("max_w: " + integerToString(max_w), 9);
boolean reset = FALSE;
reset += (w == 0);
reset += (w < min_w);
if (reset) w = min_w;
// Prevent the playlist from overlapping the player
if (w > max_w)
{
w = max_w;
// Resize the player to get more space
if (max_w < min_w)
{
w = min_w;
int mainframe_pos = mainframe.getPosition() - (min_w - max_w); // I need to save this in a variable first, otherwise mainframe.setPos will crash...
mainframe.setPosition(mainframe_pos);
}
}
debugString("set poppler: " + integerToString(w), 9);
dualwnd.setPosition(w);
}
updateMainPoppler (int w)
{
mainframe.setXmlparam("maxwidth", integerToString(w));
}
dc_openPl.onTimer ()
{
dc_openPl.stop();
debugString("dc_openPl called!", 9);
wdh_pl.show();
g_playlist.show();
g_upper.show();
//if (!wdh_pl.isVisible()) debugInt(g_playlist.getWidth());
}
dc_closePl.onTimer ()
{
dc_closePl.stop();
wdh_pl.hide();
}
//----------------------------------------------------------------------------------------------------------------
// Playlist Album Art Handles
//----------------------------------------------------------------------------------------------------------------
Global boolean attrib_bypass = false;
playlist_cover_attrib.onDataChanged ()
{
if (attrib_bypass)
return;
if (playlist_enlarge_attrib.getData() == "0")
return;
if (getData() == "1")
{
int pos = getPrivateInt(getSkinName(), "playlist_cover_poppler", PLC_POPPLER_POS);
if (pos > 0 && getPrivateString(getSkinName(), "Component", "Media Library") != "Hidden")
{
pl_dualwnd.setPosition (pos);
g_cover.show();
}
else
{
pl_dualwnd.setPosition (0);
g_cover.hide();
}
}
else
{
int pos = pl_dualwnd.getPosition();
if (pos > 0) setPrivateInt(getSkinName(), "playlist_cover_poppler", pos);
pl_dualwnd.setPosition(0);
g_cover.hide();
}
}
Global Boolean bypass;
player.onBeforeSwitchToLayout (Layout oldlayout, Layout newlayout)
{
if (oldlayout == normal)
{
bypass = 1;
}
}
g_cover.onSetVisible (Boolean onoff)
{
if (bypass)
{
bypass = 0;
return;
}
if (!onoff && !bypass_nocomp && playlist_cover_attrib.getdata() == "1" && getPrivateString(getSkinName(), "Component", "Media Library") != "Hidden" && playlist_enlarge_attrib.getData() == "1" && dualwnd.getPosition() > 0)
{
playlist_cover_attrib.setdata("0");
}
else if (onoff && !bypass_nocomp && playlist_cover_attrib.getdata() == "0" && dualwnd.getPosition() > 0)
{
attrib_bypass = true;
playlist_cover_attrib.setdata("1");
attrib_bypass = false;
}
}