void StackPresentation::MovePart(IPresentablePart::Pointer toMove, Object::Pointer cookie) { this->RemovePart(toMove); this->AddPart(toMove, cookie); if (this->GetSite()->GetSelectedPart() == toMove) { this->SelectPart(toMove); toMove->SetFocus(); } }
void TabbedStackPresentation::HandleTabFolderEvent(TabFolderEvent::Pointer e) { int type = e->type; if (type == TabFolderEvent::EVENT_MINIMIZE) { this->GetSite()->SetState(IStackPresentationSite::STATE_MINIMIZED); } else if (type == TabFolderEvent::EVENT_MAXIMIZE) { this->GetSite()->SetState(IStackPresentationSite::STATE_MAXIMIZED); } else if (type == TabFolderEvent::EVENT_RESTORE) { this->GetSite()->SetState(IStackPresentationSite::STATE_RESTORED); } else if (type == TabFolderEvent::EVENT_CLOSE) { IPresentablePart::Pointer part = folder->GetPartForTab(e->tab); if (part != 0) { QList<IPresentablePart::Pointer> parts; parts.push_back(part); this->GetSite()->Close(parts); } } else if (type == TabFolderEvent::EVENT_SHOW_LIST) { this->ShowPartList(); } else if (type == TabFolderEvent::EVENT_GIVE_FOCUS_TO_PART) { IPresentablePart::Pointer part = this->GetSite()->GetSelectedPart(); if (part != 0) { part->SetFocus(); } } else if (type == TabFolderEvent::EVENT_PANE_MENU) { IPresentablePart::Pointer part = this->GetSite()->GetSelectedPart(); if (part != 0) { part->SetFocus(); } //this->ShowPaneMenu(folder->GetPartForTab(e->tab), QPoint(e->x, e->y)); } else if (type == TabFolderEvent::EVENT_DRAG_START) { AbstractTabItem* beingDragged = e->tab; QPoint initialLocation(e->x, e->y); if (beingDragged == nullptr) { this->GetSite()->DragStart(initialLocation, false); } else { IPresentablePart::Pointer part = folder->GetPartForTab(beingDragged); try { dragStart = folder->IndexOf(part); // hold on to this TabbedStackPresentation instance, because // in this->GetSite()->DragStart() all reference may be deleted // and this instance is destroyed, leading to a seg fault when // trying to write to dragStart StackPresentation::Pointer tabbedStackPresentation(this); this->GetSite()->DragStart(part, initialLocation, false); dragStart = -1; } catch(const std::exception& exc) { dragStart = -1; throw exc; } } } else if (type == TabFolderEvent::EVENT_TAB_SELECTED) { if (ignoreSelectionChanges > 0) { return; } IPresentablePart::Pointer part = folder->GetPartForTab(e->tab); if (part != 0) { this->GetSite()->SelectPart(part); } } else if (type == TabFolderEvent::EVENT_SYSTEM_MENU) { IPresentablePart::Pointer part = folder->GetPartForTab(e->tab); if (part == 0) { part = this->GetSite()->GetSelectedPart(); } if (part != 0) { //this->ShowSystemMenu(QPoint(e->x, e->y), part); } } else if (type == TabFolderEvent::EVENT_PREFERRED_SIZE) { IPresentablePart::Pointer part = folder->GetPartForTab(e->tab); if (part == 0) { // Standalone views with no title have no tab, so just get the part. QList<IPresentablePart::Pointer> parts = this->GetSite()->GetPartList(); if (parts.size() > 0) part = parts.front(); } if (part == this->GetSite()->GetSelectedPart()) { this->GetSite()->FlushLayout(); } } }