/* COUNTDOWN LIVE - by Mattias Buelens File: WndPrefTabs.js Desc: Functions and events for WndPrefTabs */ //Callback function of WndPrefTabs for LoadPrefChilds function LoadPrefTabs(PlusWnd, ParentWnd) { LoadToolTips(PlusWnd); Temp.WndPref["TabScrollX"] = 0; Temp.WndPref["TabWidth"] = 37; Temp.WndPref["TabCount"] = 10; var Size = GetWindowSize(PlusWnd.Handle); Temp.WndPref["TabVisible"] = (Size !== false) ? Math.floor(Size[0] / Temp.WndPref["TabWidth"]) : 8; } //Reloads the language of the WndPrefTabs window, called by WndPref_ReloadLang function WndPrefTabs_ReloadLang(PlusWnd) { UpdateToolTips(PlusWnd); } //Switch to a tab function WndPref_SwitchTab(sTabName) { ClickBtn(Temp.WndPref["ChildTabs"], "RadTab"+sTabName); } /* FUNCTION: WndPrefTabs_Scroll Desc: Scrolls the tabs list Parameters: Options - Object with scroll options, two methods are supported: - { [number] move } Moves the scroll pointer. Example: { move: 2 } -> Scrolls the list 2 to the right. - { [string] visible } Makes sure that a given tab is visible. Example: { visible: "Countdown" } -> Scrolls the list so the tab Countdown is visible. */ function WndPrefTabs_Scroll(Options) { if(!IsWindow("WndPref") || typeof Options !== "object") return false; var PlusWnd = Temp.WndPref["ChildTabs"]; if(!IsWindow(PlusWnd)) return false; var nTabWidth = Temp.WndPref["TabWidth"]; var nScrollX = Temp.WndPref["TabScrollX"]; for(var Key in Options) break; switch(Key) { case "move": var nMove = -Math.floor(Options[Key]); var bEnableLeft = true, bEnableRight = true; //Calculate the new scrolling position var nNewX = nScrollX + nMove * nTabWidth; //Calculate the right limit var nRightLimit = -(Temp.WndPref["TabCount"] - Temp.WndPref["TabVisible"]) * nTabWidth; if(Temp.WndPref["TabVisible"] === Temp.WndPref["TabCount"]) { //Disable both arrow buttons when width can hold all tabs DoScroll(-nScrollX); bEnableLeft = bEnableRight = false; } else if(nNewX > 0) { //Clip to the left limit DoScroll(-nScrollX); var bEnableLeft = false; } else if(nNewX < nRightLimit) { //Clip to the right limit DoScroll(nRightLimit - nScrollX); var bEnableRight = false; } else { //Scroll without clipping DoScroll(nMove * nTabWidth); var bEnableLeft = (nNewX < 0); var bEnableRight = (nNewX > nRightLimit); } //Enable the arrow buttons EnableWindow(Wnd["WndPref"].GetControlHandle("BtnTabLeft"), bEnableLeft); EnableWindow(Wnd["WndPref"].GetControlHandle("BtnTabRight"), bEnableRight); break; case "visible": var nTabLeft = -Math.floor(nScrollX / nTabWidth); //Most left visible tab if(typeof Options[Key] === "string") { //A tab name was given var CtrlId = "RadTab" + Options[Key]; if(!PlusWnd.GetControlHandle(CtrlId)) return false; //Find out the position of the requested tab var WinPos = GetWindowRect(PlusWnd.Handle); if(WinPos === false) return false; var CtrlPos = GetWindowRect(PlusWnd.GetControlHandle(CtrlId)); var CtrlX = CtrlPos.x - WinPos.x; var nTabNum = nTabLeft + Math.floor(CtrlX / nTabWidth); //Tab number } else if(typeof Options[Key] === "number") { //A tab number was given var nTabNum = Math.floor(Options[Key]); } //If the tab number isn't between the visible tab limits, scroll the list if(nTabNum < nTabLeft) { var nMove = Math.floor(CtrlX / nTabWidth); } else if(nTabNum >= Temp.WndPref["TabVisible"] + nTabLeft) { var nMove = Math.floor(CtrlX / nTabWidth) + 1 - Temp.WndPref["TabVisible"]; } else var nMove = 0; WndPrefTabs_Scroll({ move:nMove }); break; } function DoScroll(dX) { var Result = Interop.Call("user32", "ScrollWindowEx", /*hWnd*/ PlusWnd.Handle, /*dX*/ dX, /*dY*/ 0, /*prcScroll*/ 0, /*prcClip*/ 0, /*hrgnUpdate*/ 0, /*prcUpdate*/ 0, /*flags*/ SW_INVALIDATE | SW_SCROLLCHILDREN ); if(Result === 0) return false; Temp.WndPref["TabScrollX"] += dX; } } //Resizes the tabs list, used on window resizing function WndPrefTabs_Resize(PlusWnd, ChildWnd, nWidth, nHeight) { var Width = 0, Height = 0; var nTabWidth = Temp.WndPref["TabWidth"]; var PosChild = GetElementPos(PlusWnd, "HoldTabs"); if(PosChild) { Width = PosChild.w; Height = PosChild.h; } else { Width = nWidth - (/* Left */ 109 + /* Right */ 195); Height = 31; } var NewWidth = Math.min(Width - (Width % nTabWidth), Temp.WndPref["TabCount"] * nTabWidth); Temp.WndPref["TabVisible"] = Math.min(Math.floor(Width / nTabWidth), Temp.WndPref["TabCount"]); var WndPos = GetWindowRect(PlusWnd.Handle); var BtnPos = GetWindowRect(PlusWnd.GetControlHandle("BtnTabRight")); if(WndPos && BtnPos) { var BtnX = 109 + (Temp.WndPref["TabVisible"]) * nTabWidth; var BtnY = 51; Interop.Call("user32", "MoveWindow", PlusWnd.GetControlHandle("BtnTabRight"), BtnX, BtnY, BtnPos.w, BtnPos.h, true); } Interop.Call("user32", "SetWindowPos", ChildWnd.Handle, 0, 0, 0, NewWidth, Height, 18); WndPrefTabs_Scroll({ visible:Temp.WndPref["CurTab"] }); } //Events function OnWndPrefTabsEvent_CtrlClicked(PlusWnd, CtrlId) { Trace("> WndPrefTabs : Control "+CtrlId+" clicked"); if(/^RadTab(.+)$/.test(CtrlId)) { var ChildId = RegExp.$1; WndPref_ShowChild(ChildId); WndPrefTabs_Scroll({ visible: ChildId }); } }