/*--------------------------------------------------- ----------------------------------------------------- Filename: maximize.m Version: 3.4 Type: maki Date: 13. Sep. 2007 - 15:05 Author: Martin Poehlmann aka Deimos E-Mail: martin@skinconsortium.com Internet: www.skinconsortium.com www.martin.deimos.de.vu ----------------------------------------------------- ---------------------------------------------------*/ #include #include attribs/init_Autoresize.m Function setImages(boolean isMaximized); Function maximizeShade(boolean save); Function restoreShade(); Function maximizePlayer(boolean save); Function restorePlayer(); Function setWndToScreen(); #define SAVEPOS_SHADE 2 #define SAVEPOS_NORMAL 1 #define SAVEPOS_ALL 0 Function savePos(int code); Class GuiObject Mousetrap; Global Button Maximize, MaximizeShade, Restore, RestoreShade; Global Mousetrap noResizerTB, MousetrapTB, MousetrapShade, MousetrapMenu; Global Layout normal, shade; Global Boolean tgst; Global Layer resizer, noResizer, resizerShade, resizerShade2, topResizer; Global Container player; Global GuiObject shadeticker, slamclose; Global Group regions, regionsShade; Global Layer regionBlack, regionBlackShade; Global Int DEFAULT_PLAYER_H, DEFAULT_SHADE_H; Global Int old_x, old_y, old_h, old_w; System.onScriptLoaded () { initAttribs_Autoresize(); player = System.getContainer("main"); normal = player.getLayout("normal"); Maximize = normal.findObject("player.titlebar.button.maximize"); Restore = normal.findObject("player.titlebar.button.restore"); MousetrapTB = normal.findObject("player.mousetrap.maximize"); resizer = normal.findObject("player.resizer.bottomright"); noResizer = normal.findObject("player.resizer.disable"); noResizerTB = normal.findObject("titlebar.resizer.disable"); regions = normal.findObject("window.background.regions"); regionBlack = normal.findObject("window.background.maximize"); topResizer = normal.findObject("titlebar.resizer.top"); slamclose = normal.findObject("maximize.slam.close"); MousetrapMenu = normal.findObject("menu.hidden.mousetrap"); shade = player.getLayout("shade"); shadeticker = shade.findObject("Songticker"); MaximizeShade = shade.findObject("shade.button.maximize"); RestoreShade = shade.findObject("shade.button.restore"); resizerShade = shade.findObject("shade.resizer.right"); resizerShade2 = shade.findObject("shade.resizer.right2"); MousetrapShade = shade.findObject("shade.mousetrap"); regionsShade = Shade.findObject("window.background.regions"); regionBlackShade = Shade.findObject("window.background.maximize"); DEFAULT_PLAYER_H = stringToInteger(getToken(getParam(), "," , 0)); DEFAULT_SHADE_H = stringToInteger(getToken(getParam(), "," , 1)); if (getPrivateInt(getSkinName(), "isMainWndMaximized", 0)) { maximizePlayer (FALSE); maximizeShade (FALSE); setImages (1); } else { if (getPrivateInt(getSkinName(), "First Start", 1)) setWndToScreen(); else { restorePlayer (); restoreShade (); } } } // ------------------------------------------------------------------------------ // Cope with viewport changes so we're happy with Windows 8.x snapping mode, etc // ------------------------------------------------------------------------------ System.onViewPortChanged(int width, int height) { if (getPrivateInt(getSkinName(), "isMainWndMaximized", 0)) { if (normal == player.getCurLayout()) maximizePlayer (FALSE); else if (shade == player.getCurLayout()) maximizeShade (FALSE); } } // ------------------------------------------------------------------------------ // Save all our window positions on skin unloading // ------------------------------------------------------------------------------ System.onScriptUnloading () { // if (player.getCurLayout() == normal) savePos(SAVEPOS_NORMAL); // else if (player.getCurLayout() == shade) savePos(SAVEPOS_SHADE); } // ------------------------------------------------------------------------------ // Prohibit autoresizing by Video if we're in maximized player (layout_normal) // ------------------------------------------------------------------------------ sui_autorsize_attrib.onDataChanged () { if (getData() == "1") { normal.setXMLParam("lockminmax", "0"); } else { double d = normal.getScale(); if (normal.getLeft() == getViewportLeft() && normal.getTop() == getViewportTop() && normal.getWidth() == getViewPortWidthfromGuiObject(normal)/d && normal.getHeight() == getViewPortHeightfromGuiObject(normal)/d) { normal.setXMLParam("lockminmax", "1"); } } } System.onKeyDown (String key) { if (key == "ctrl+w" && (shade.isActive() || normal.isActive())) { if (shade != player.getCurLayout()) { player.switchToLayout("shade"); } else { player.switchToLayout("normal"); } complete; } } // ------------------------------------------------------------------------------ // Button clicks // ------------------------------------------------------------------------------ Maximize.onLeftClick () { if (!getPrivateInt(getSkinName(), "isMainWndMaximized", 0)) { maximizePlayer (TRUE); } } Restore.onLeftClick () { if (getPrivateInt(getSkinName(), "isMainWndMaximized", 0)) { restorePlayer (); } } MaximizeShade.onLeftClick () { if (getPrivateInt(getSkinName(), "isMainWndMaximized", 0)) { restoreShade (); } else { maximizeShade (TRUE); } } RestoreShade.onLeftClick () { if (getPrivateInt(getSkinName(), "isMainWndMaximized", 0)) { restoreShade (); } else { maximizeShade (TRUE); } } /** This will detect the second down click */ Mousetrap.onLeftButtonDblClk (int x, int y) { tgst = true; } /** Once the button gets up, we'll toggle the maximized state */ mousetrap.onLeftButtonUp (int x, int y) { if (tgst) { if (shade == player.getCurLayout()) { if (titlebar_dblclk_max_attib.getData() == "1") { if (!getPrivateInt(getSkinName(), "isMainWndMaximized", 0)) { maximizeShade (TRUE); } else { restoreShade(); } } else { player.switchToLayout("normal"); } } else { if (titlebar_dblclk_max_attib.getData() == "1") { if (!getPrivateInt(getSkinName(), "isMainWndMaximized", 0)) { maximizePlayer (TRUE); } else { restorePlayer(); } } else { player.switchToLayout("shade"); } } } tgst = false; } topResizer.onLeftButtonDblClk (int x, int y) { if (titlebar_dblclk_max_attib.getData() == "1") { if (!getPrivateInt(getSkinName(), "isMainWndMaximized", 0)) { maximizePlayer (TRUE); } else { restorePlayer(); } } else { player.switchToLayout("shade"); } } // ------------------------------------------------------------------------------ // Detect maximized states on window resize // ------------------------------------------------------------------------------ normal.onEndMove () { savePos(SAVEPOS_NORMAL); } normal.onResize (int x, int y, int w, int nh) { //debugString("onResize("+integertoString(x)+","+integertoString(y)+","+integertoString(w)+","+integertoString(nh)+");", 9); y = normal.getTop(); // prohibit to set nh = 0 if (nh == 0 || w == 0) { //debug("error setting player_normal w=" + integerToString(w) + " , h=" + integerToString(nh)); normal.resize(getLeft(), getTop(), getWidth(), DEFAULT_PLAYER_H); return; } if (normal != player.getCurLayout()) return; if (old_x == x && old_y == y && old_h = nh && old_w == w) return; old_x = x; old_y = y; old_h = nh; old_w = w; if (getPrivateString(getSkinName(), "Component", "Media Library") == "Hidden") { double d = normal.getScale(); if (w == getViewPortWidthfromGuiObject(normal)/d && x == getViewportLeft() && y == getViewportTop()) { //setPrivateInt(getSkinName(), "isMainWndMaximized", 1); //setImages (1); } else { setPrivateInt(getSkinName(), "isMainWndMaximized", 0); setImages (0); } } else { double d = normal.getScale(); if (w == getViewPortWidthfromGuiObject(normal)/d && nh == getViewPortHeightfromGuiObject(normal)/d) { //setPrivateInt(getSkinName(), "isMainWndMaximized", 1); //setImages (1); } else { setPrivateInt(getSkinName(), "isMainWndMaximized", 0); setImages (0); } } savePos(SAVEPOS_NORMAL); } shade.onEndMove () { savePos(SAVEPOS_SHADE); } shade.onResize (int x, int y, int w, int nh) { y = shade.getTop(); // prohibit to set nh = 0 if (nh == 0 || w == 0) { debug("error setting player_shade w=" + integerToString(w) + " , h=" + integerToString(nh)); shade.resize(getLeft(), getTop(), getWidth(), DEFAULT_SHADE_H); return; } if (shade != player.getCurLayout()) return; if (old_x == x && old_y == y && old_h = nh && old_w == w) return; old_x = x; old_y = y; old_h = nh; old_w = w; double d = shade.getScale(); if (w == getViewPortWidthfromGuiObject(shade)/d && y == getViewportTop() && x == getViewportLeft()) { //setPrivateInt(getSkinName(), "isMainWndMaximized", 1); //setImages (1); } else { setPrivateInt(getSkinName(), "isMainWndMaximized", 0); setImages (0); } savePos(SAVEPOS_SHADE); } // ------------------------------------------------------------------------------ // Resize our window on scale if we are maximized // ------------------------------------------------------------------------------ normal.onScale (Double newscalevalue) { if (normal != player.getCurLayout()) return; if (getPrivateInt(getSkinName(), "isMainWndMaximized", 0)) { maximizePlayer(FALSE); } savePos(SAVEPOS_NORMAL); } shade.onScale (Double newscalevalue) { if (shade != player.getCurLayout()) return; if (getPrivateInt(getSkinName(), "isMainWndMaximized", 0)) { maximizeShade(FALSE); } savePos(SAVEPOS_SHADE); } // ------------------------------------------------------------------------------ // Before we switch between layouts, check all images and window sizes // ------------------------------------------------------------------------------ player.onBeforeSwitchToLayout (Layout _layoutnow, Layout _layouttobe) { if (_layoutnow == normal) savePos(SAVEPOS_NORMAL); else if (_layoutnow == shade) savePos(SAVEPOS_SHADE); if (getPrivateInt(getSkinName(), "isMainWndMaximized", 0)) { if (_layouttobe == normal) maximizePlayer (FALSE); else if (_layouttobe == shade) maximizeShade (FALSE); setImages (1); } else { if (_layouttobe == normal) restorePlayer (); else if (_layouttobe == shade) restoreShade (); } } // ------------------------------------------------------------------------------ // Save wnd position before we go to collapsed state // ------------------------------------------------------------------------------ normal.onAction (String action, String param, Int x, int y, int p1, int p2, GuiObject source) { if (action == "sui" && param == "tonocomp" && x == 0) { savePos (SAVEPOS_NORMAL); } } // ****************************************************************************** // Our Function Handles // ****************************************************************************** setImages (boolean isMaximized) { if (isMaximized) { // Normal Maximize.hide(); Restore.show(); if (getPrivateString(getSkinName(), "Component", "Media Library") == "Hidden") { MousetrapTB.setXMLparam("move", "0"); MousetrapMenu.setXMLparam("move", "0"); noResizerTB.setXMLparam("ghost", "0"); } else { MousetrapTB.setXMLparam("move", "0"); MousetrapMenu.setXMLparam("move", "0"); noResizerTB.setXMLparam("ghost", "0"); } if (sui_autorsize_attrib.getData() == "0") normal.setXMLParam("lockminmax", "1"); else normal.setXMLParam("lockminmax", "0"); resizer.hide(); noResizer.show(); regions.hide(); regionBlack.show(); // Shade MousetrapShade.setXMLparam("move", "0"); shadeticker.setXmlParam("move", "0"); MaximizeShade.hide(); RestoreShade.show(); resizerShade.hide(); regionsShade.hide(); resizerShade2.hide(); regionBlackShade.show(); slamclose.show(); } else { // Normal resizer.show(); noResizer.hide(); MousetrapTB.setXMLparam("move", "1"); noResizerTB.setXMLparam("ghost", "1"); MousetrapMenu.setXMLparam("move", "1"); normal.setXMLParam("lockminmax", "0"); Maximize.show(); Restore.hide(); regions.show(); regionBlack.hide(); // Shade MousetrapShade.setXMLparam("move", "1"); shadeticker.setXmlParam("move", "1"); resizerShade.show(); resizerShade2.show(); MaximizeShade.show(); RestoreShade.hide(); regionsShade.show(); regionBlackShade.hide(); slamclose.hide(); } } maximizeShade (boolean save) { if (save) { savePos(SAVEPOS_SHADE); setPrivateInt(getSkinName(), "isMainWndMaximized", 1); setImages (1); } double newscalevalue = shade.getScale(); int sh = shade.getHeight(); if (sh < 1) sh = DEFAULT_SHADE_H; shade.resize(getViewPortLeftfromGuiObject(shade),getViewPortTopfromGuiObject(shade),getViewportWidthfromGuiObject(shade)/newscalevalue, sh); } restoreShade () { if (link_w_attrib.getData() == "0") { shade.resize( getPrivateInt(getSkinName(), "shade_nomax_x", shade.getLeft()), getPrivateInt(getSkinName(), "shade_nomax_y", shade.getTop()), getPrivateInt(getSkinName(), "shade_nomax_w", 500), DEFAULT_SHADE_H ); } else { shade.resize( getPrivateInt(getSkinName(), "nomax_x", shade.getLeft()), getPrivateInt(getSkinName(), "nomax_y", shade.getTop()), getPrivateInt(getSkinName(), "nomax_w", 700), DEFAULT_SHADE_H ); } setPrivateInt(getSkinName(), "isMainWndMaximized", 0); setImages (0); } maximizePlayer (boolean save) { if (save) { savePos(SAVEPOS_NORMAL); setPrivateInt(getSkinName(), "isMainWndMaximized", 1); setImages (1); } double newscalevalue = normal.getScale(); int nh; if (getPrivateString(getSkinName(), "Component", "Media Library") == "Hidden") { nh = DEFAULT_PLAYER_H; } else { nh = getViewPortHeightfromGuiObject(normal)/newscalevalue; } if (nh < 1) nh = DEFAULT_PLAYER_H; normal.resize(getViewPortLeftfromGuiObject(normal), getViewPortTopfromGuiObject(normal), getViewPortWidthfromGuiObject(normal)/newscalevalue, nh); } restorePlayer () { //messagebox("restorePlayer", "", 0, ""); int x, y, w, h; x = getPrivateInt(getSkinName(), "nomax_x", normal.getLeft()); y = getPrivateInt(getSkinName(), "nomax_y", normal.getTop()); w = getPrivateInt(getSkinName(), "nomax_w", normal.getWidth()); if (getPrivateString(getSkinName(), "Component", "Media Library") == "Hidden") { h = DEFAULT_PLAYER_H; } else { h = getPrivateInt(getSkinName(), "nomax_h", normal.getHeight()); } // check if player_w is too small if (w < stringToInteger(normal.getXmlParam("minimum_w"))) w = stringToInteger(normal.getXmlParam("minimum_w")); normal.resize(x, y, w, h); normal.sendAction("pledit_posupdate", "", 0,0,0,0); setPrivateInt(getSkinName(), "isMainWndMaximized", 0); setImages (0); } savePos (int code) { if (!getPrivateInt(getSkinName(), "isMainWndMaximized", 0)) { if (code == SAVEPOS_NORMAL || code == SAVEPOS_ALL) { if (getPrivateString(getSkinName(), "Component", "Media Library") != "Hidden") { int nnh = normal.getHeight(); //martin> i really dunno why i've added this code: //if (nnh > 0 && nnh < 200) setPrivateInt(getSkinName(), "nomax_h", normal.getHeight()); //So lets try it again w/o switch in order to fix resizing - goto shade - goback - size not remembered bug if (nnh > 200) setPrivateInt(getSkinName(), "nomax_h", normal.getHeight()); // ^ otherwise we save in collapsed mode } setPrivateInt(getSkinName(), "nomax_x", normal.getLeft()); setPrivateInt(getSkinName(), "nomax_y", normal.getTop()); if (normal.getWidth() > 0) setPrivateInt(getSkinName(), "nomax_w", normal.getWidth()); //debugInt(getPrivateInt(getSkinName(), "nomax_w", normal.getWidth())); } if (code == SAVEPOS_SHADE || code == SAVEPOS_ALL) { if (link_w_attrib.getData() == "0") { setPrivateInt(getSkinName(), "shade_nomax_x", shade.getLeft()); setPrivateInt(getSkinName(), "shade_nomax_y", shade.getTop()); if (shade.getWidth() > 0) setPrivateInt(getSkinName(), "shade_nomax_w", shade.getWidth()); } else { if (shade.getWidth() > 0) setPrivateInt(getSkinName(), "nomax_w", shade.getWidth()); setPrivateInt(getSkinName(), "nomax_x", shade.getLeft()); setPrivateInt(getSkinName(), "nomax_y", shade.getTop()); } //debugInt(getPrivateInt(getSkinName(), "nomax_w", shade.getWidth())); //debugInt(getPrivateInt(getSkinName(), "shade_nomax_w", shade.getWidth())); } } if (code == SAVEPOS_NORMAL || code == SAVEPOS_ALL) { if (getPrivateString(getSkinName(), "Component", "Media Library") == "Hidden") setPrivateInt(getSkinName(), "nomax_y_h", normal.getTop()); } //debugInt(getPrivateInt(getSkinName(), "nomax_w", shade.getWidth())); } setWndToScreen () { int y = getViewPortTop(); int x = getViewPortLeft(); int h = getViewPortHeight(); int w = getViewPortWidth(); int sw = 0.8 * w; int sh = 0.85 * h; int mh = stringToInteger(normal.getXmlParam("minimum_h")); int mw = stringToInteger(normal.getXmlParam("minimum_w")); if (sh < mh) sh = mh; if (sw < mw) sw = mw; /* int sx = x + (w-sw)/2; int sy = y + (h-sh)/2;*/ normal.resize(normal.getLeft(), normal.getTop(), sw, sh); setPrivateInt(getSkinName(), "First Start", 0); setPrivateInt(getSkinName(), "isMainWndMaximized", 0); setImages (0); }