void Aggregator::TabOpenRequested (const QByteArray& tabClass) { if (tabClass == "Aggregator") emit addNewTab (GetTabClassInfo ().VisibleName_, this); else qWarning () << Q_FUNC_INFO << "unknown tab class" << tabClass; }
void UncloseManager::HandleRemoveTab (QWidget *widget) { const auto tab = qobject_cast<ITabWidget*> (widget); if (!tab) return; if (const auto recTab = qobject_cast<IRecoverableTab*> (widget)) HandleRemoveRecoverableTab (widget, recTab); else if (IsGoodSingleTC (tab->GetTabClassInfo ())) HandleRemoveSingleTab (widget, tab); }
void Plugin::TabOpenRequested (const QByteArray& tabClass) { if (tabClass == "mail") handleNewTab (MailTabClass_.VisibleName_, new MailTab (Proxy_, MailTabClass_, this)); else if (tabClass == "compose") { auto ct = new ComposeMessageTab (); handleNewTab (ct->GetTabClassInfo ().VisibleName_, ct); } else qWarning () << Q_FUNC_INFO << "unknown tab class" << tabClass; }
void SeparateTabBar::mouseMoveEvent (QMouseEvent *event) { if (isMovable ()) { QTabBar::mouseMoveEvent (event); return; } if (!(event->buttons () & Qt::LeftButton)) return; if ((event->pos () - DragStartPos_).manhattanLength () < QApplication::startDragDistance ()) return; const int dragIdx = tabAt (DragStartPos_); auto widget = TabWidget_->Widget (dragIdx); auto itw = qobject_cast<ITabWidget*> (widget); if (!itw) { qWarning () << Q_FUNC_INFO << "widget at" << dragIdx << "doesn't implement ITabWidget"; return; } auto px = QPixmap::grabWidget (widget); px = px.scaledToWidth (px.width () / 2, Qt::SmoothTransformation); auto idt = qobject_cast<IDNDTab*> (widget); auto data = new QMimeData (); if (!idt || QApplication::keyboardModifiers () == Qt::ControlModifier) { data->setData ("x-leechcraft/tab-drag-action", "reordering"); data->setData ("x-leechcraft/tab-tabclass", itw->GetTabClassInfo ().TabClass_); } else if (idt) idt->FillMimeData (data); auto drag = new QDrag (this); drag->setMimeData (data); drag->setPixmap (px); drag->exec (); }
void Plugin::TabOpenRequested (const QByteArray& tabClass) { if (tabClass == "mail") { const auto mt = new MailTab { Proxy_, MailTabClass_, this }; handleNewTab (MailTabClass_.VisibleName_, mt); WkFontsWidget_->RegisterSettable (mt); } else if (tabClass == "compose") { auto ct = new ComposeMessageTab; handleNewTab (ct->GetTabClassInfo ().VisibleName_, ct); } else qWarning () << Q_FUNC_INFO << "unknown tab class" << tabClass; }
void Plugin::TabOpenRequested (const QByteArray& tabClass) { if (tabClass == "mail") { const auto mt = new MailTab { Proxy_, AccsMgr_.get (), ComposeTabFactory_, Storage_.get (), MailTabClass_, ShortcutsMgr_, this }; handleNewTab (MailTabClass_.VisibleName_, mt); } else if (tabClass == "compose") { const auto ct = ComposeTabFactory_->MakeTab (); handleNewTab (ct->GetTabClassInfo ().VisibleName_, ct); } else qWarning () << Q_FUNC_INFO << "unknown tab class" << tabClass; }
QString TwitterPage::GetTabRecoverName () const { return GetTabClassInfo ().VisibleName_; }
QIcon TwitterPage::GetTabRecoverIcon () const { return GetTabClassInfo ().Icon_; }
void SeparateTabWidget::handleAddDefaultTab () { const auto& combined = XmlSettingsManager::Instance ()-> property ("DefaultNewTab").toString ().toLatin1 (); if (combined != "contextdependent") { const auto& parts = combined.split ('|'); if (parts.size () != 2) qWarning () << Q_FUNC_INFO << "incorrect split" << parts << combined; else { const QByteArray& newTabId = parts.at (0); const QByteArray& tabClass = parts.at (1); QObject *plugin = Core::Instance () .GetPluginManager ()->GetPluginByID (newTabId); IHaveTabs *iht = qobject_cast<IHaveTabs*> (plugin); if (!iht) qWarning () << Q_FUNC_INFO << "plugin with id" << newTabId << "is not a IMultiTabs"; else { iht->TabOpenRequested (tabClass); return; } } } IHaveTabs *highestIHT = 0; QByteArray highestTabClass; int highestPriority = 0; for (auto iht : Core::Instance ().GetPluginManager ()->GetAllCastableTo<IHaveTabs*> ()) for (const auto& info : iht->GetTabClasses ()) { if (!(info.Features_ & TFOpenableByRequest)) continue; if (info.Priority_ <= highestPriority) continue; highestIHT = iht; highestTabClass = info.TabClass_; highestPriority = info.Priority_; } const auto imtw = qobject_cast<ITabWidget*> (CurrentWidget ()); const int delta = 15; if (imtw && imtw->GetTabClassInfo ().Priority_ + delta > highestPriority) { highestIHT = qobject_cast<IHaveTabs*> (imtw->ParentMultiTabs ()); highestTabClass = imtw->GetTabClassInfo ().TabClass_; } if (!highestIHT) { qWarning () << Q_FUNC_INFO << "no IHT detected"; return; } highestIHT->TabOpenRequested (highestTabClass); }
QMenu* SeparateTabWidget::GetTabMenu (int index) { QMenu *menu = new QMenu (); const auto widget = Widget (index); const auto imtw = qobject_cast<ITabWidget*> (widget); if (XmlSettingsManager::Instance ()-> property ("ShowPluginMenuInTabs").toBool ()) { bool asSub = XmlSettingsManager::Instance ()-> property ("ShowPluginMenuInTabsAsSubmenu").toBool (); if (imtw) { const auto& tabActions = imtw->GetTabBarContextMenuActions (); QMenu *subMenu = asSub ? new QMenu (TabText (index), menu) : nullptr; for (auto act : tabActions) (asSub ? subMenu : menu)->addAction (act); if (asSub) menu->addMenu (subMenu); if (tabActions.size ()) menu->addSeparator (); } } auto rootWM = Core::Instance ().GetRootWindowsManager (); const int windowIndex = rootWM->GetWindowIndex (Window_); auto moveMenu = menu->addMenu (tr ("Move tab to")); auto toNew = moveMenu->addAction (tr ("New window"), rootWM, SLOT (moveTabToNewWindow ())); toNew->setProperty ("TabIndex", index); toNew->setProperty ("FromWindowIndex", windowIndex); if (rootWM->GetWindowsCount () > 1) { moveMenu->addSeparator (); for (int i = 0; i < rootWM->GetWindowsCount (); ++i) { auto thatWin = rootWM->GetMainWindow (i); if (thatWin == Window_) continue; const auto& actTitle = tr ("To window %1 (%2)") .arg (i + 1) .arg (thatWin->windowTitle ()); auto toExisting = moveMenu->addAction (actTitle, rootWM, SLOT (moveTabToExistingWindow ())); toExisting->setProperty ("TabIndex", index); toExisting->setProperty ("FromWindowIndex", windowIndex); toExisting->setProperty ("ToWindowIndex", i); } } const auto irt = qobject_cast<IRecoverableTab*> (widget); if (imtw && irt && (imtw->GetTabClassInfo ().Features_ & TabFeature::TFOpenableByRequest) && !(imtw->GetTabClassInfo ().Features_ & TabFeature::TFSingle)) { const auto cloneAct = menu->addAction (tr ("Clone tab"), this, SLOT (handleCloneTab ())); cloneAct->setProperty ("TabIndex", index); cloneAct->setProperty ("ActionIcon", "tab-duplicate"); } for (auto act : TabBarActions_) { if (!act) { qWarning () << Q_FUNC_INFO << "detected null pointer"; continue; } menu->addAction (act); } Util::DefaultHookProxy_ptr proxy (new Util::DefaultHookProxy); emit hookTabContextMenuFill (proxy, menu, index, Core::Instance ().GetRootWindowsManager ()->GetWindowIndex (Window_)); return menu; }