winamp/Src/resources/skins/Winamp Modern/scripts/videoavs.m

314 lines
9.0 KiB
Mathematica
Raw Normal View History

2024-09-24 13:54:57 +01:00
#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");
}
}
}