diff options
Diffstat (limited to 'Src/resources/skins/Winamp Modern/scripts/videoavs.m')
-rw-r--r-- | Src/resources/skins/Winamp Modern/scripts/videoavs.m | 313 |
1 files changed, 313 insertions, 0 deletions
diff --git a/Src/resources/skins/Winamp Modern/scripts/videoavs.m b/Src/resources/skins/Winamp Modern/scripts/videoavs.m new file mode 100644 index 00000000..32ce21cb --- /dev/null +++ b/Src/resources/skins/Winamp Modern/scripts/videoavs.m @@ -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"); + } + } +} + |