void Plugin::hookTabFinishedMoving (LeechCraft::IHookProxy_ptr, int index, int windowId) { auto window = Proxy_->GetRootWindowsManager ()->GetMainWindow (windowId); if (!window) return; auto tw = Proxy_->GetRootWindowsManager ()->GetTabWidget (windowId); if (!tw) return; int realIndex = tw->TabData (index).toInt (); int realNextIndex = tw->TabData (index + 1).toInt (); int realPrevIndex = tw->TabData (index - 1).toInt (); if (Window2PinTabsIndex2TabData_.contains (window) && Window2PinTabsIndex2TabData_ [window].contains (realNextIndex) && !Window2PinTabsIndex2TabData_ [window].contains (realIndex)) { pinTab (index); tw->MoveTab (Window2PinTabsIndex2TabData_[window].count () - 1, index); } else if (Window2PinTabsIndex2TabData_ [window].contains (realIndex) && index && !Window2PinTabsIndex2TabData_ [window].contains (realPrevIndex)) { unPinTab (index); tw->MoveTab (Window2PinTabsIndex2TabData_ [window].count (), index); } }
void Plugin::unPinTab (int index) { const int windowId = Proxy_->GetRootWindowsManager ()->GetPreferredWindowIndex (); auto window = Proxy_->GetRootWindowsManager ()->GetMainWindow (windowId); if (!window) return; auto tw = Proxy_->GetRootWindowsManager ()->GetTabWidget (windowId); if (!tw) return; if (index == -1) index = sender ()->property ("Leechcraft/PinTab/CurrentIndex").toInt (); if (index < 0 || index >= tw->WidgetCount ()) { qWarning () << Q_FUNC_INFO << "invalid index " << index; return; } int realIndex = tw->TabData (index).toInt (); tw->Widget (index)-> setProperty ("SessionData/org.LeechCraft.PinTab.PinState", false); auto data = Window2PinTabsIndex2TabData_ [window].take (realIndex); tw->SetTabText (index, data.first); tw->SetTabClosable (index, true, data.second); tw->MoveTab (index, Window2PinTabsIndex2TabData_.value (window).count ()); }
void Plugin::pinTab (int index) { const int windowId = Proxy_->GetRootWindowsManager ()->GetPreferredWindowIndex (); auto window = Proxy_->GetRootWindowsManager ()->GetMainWindow (windowId); if (!window) return; auto tw = Proxy_->GetRootWindowsManager ()->GetTabWidget (windowId); if (!tw) return; if (index == -1) index = sender ()->property ("Leechcraft/PinTab/CurrentIndex").toInt (); if (index < 0 || index >= tw->WidgetCount ()) { qWarning () << Q_FUNC_INFO << "invalid index " << index; return; } tw->Widget (index)-> setProperty ("SessionData/org.LeechCraft.PinTab.PinState", true); ++Window2Id_ [window]; auto pair = qMakePair (tw->TabText (index), tw->TabButton (index, CloseSide_)); tw->SetTabData (index, Window2Id_ [window]); tw->SetTabText (index, ""); tw->SetTabClosable (index, false); Window2PinTabsIndex2TabData_ [window] [Window2Id_.value (window, 0)] = pair; tw->MoveTab (index, Window2PinTabsIndex2TabData_ [window].count () - 1); }
void HeaderCtrl::LeftUp(Point, dword) { if(isdrag) { if(li >= 0 && ti >= 0) MoveTab(li, ti); li = ti = -1; Refresh(); } else if(pushi >= 0 && push) col[pushi].WhenAction(); push = false; ti = li = pushi = -1; isdrag = false; Refresh(); if(split >= 0 && !track) { Action(); WhenLayout(); } DoSbTotal(); }