619 lines
14 KiB
Objective-C
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 "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;
|
|
}
|
|
} |