void SplitterOrView::unsplit(IUAVGadget *gadget) { if (!m_splitter) { return; } SplitterOrView *view = findView(gadget); if (!view || view == this) { return; } // find the other gadgets // TODO handle case where m_splitter->count() > 2 SplitterOrView *splitterOrView = NULL; for (int i = 0; i < m_splitter->count(); ++i) { splitterOrView = qobject_cast<SplitterOrView *>(m_splitter->widget(i)); if (splitterOrView && (splitterOrView != view)) { break; } } if (splitterOrView) { if (splitterOrView->isView()) { layout()->addWidget(splitterOrView->m_view); } else { layout()->addWidget(splitterOrView->m_splitter); } layout()->removeWidget(m_splitter); m_uavGadgetManager->emptyView(view->m_view); delete view; delete m_splitter; m_view = splitterOrView->m_view; m_splitter = splitterOrView->m_splitter; } }
void SplitterOrView::unsplit(IUAVGadget *gadget) { if (!m_splitter) { return; } SplitterOrView *gadgetView = findView(gadget); if (!gadgetView || gadgetView == this) { return; } // find the other gadgets // TODO handle case where m_splitter->count() > 2 SplitterOrView *otherView = NULL; for (int i = 0; i < m_splitter->count(); ++i) { SplitterOrView *view = qobject_cast<SplitterOrView *>(m_splitter->widget(i)); if (view && (view != gadgetView)) { otherView = view; break; } } if (otherView) { // update UI if (otherView->isView()) { layout()->addWidget(otherView->m_view); } else { layout()->addWidget(otherView->m_splitter); } layout()->removeWidget(m_splitter); // transfer other view to this view QSplitter *oldSplitter = m_splitter; m_view = otherView->m_view; m_splitter = otherView->m_splitter; // cleanup gadget view m_uavGadgetManager->emptyView(gadgetView->m_view); // delete child views (not necessary...) delete gadgetView; delete otherView; // delete old splitter (and remaining SplitterOrView children...) delete oldSplitter; } }
void SplitterOrView::unsplit() { if (!m_splitter) return; Q_ASSERT(m_splitter->count() == 1); SplitterOrView *childSplitterOrView = qobject_cast<SplitterOrView*>(m_splitter->widget(0)); QSplitter *oldSplitter = m_splitter; m_splitter = 0; if (childSplitterOrView->isSplitter()) { Q_ASSERT(childSplitterOrView->view() == 0); m_splitter = childSplitterOrView->takeSplitter(); m_layout->addWidget(m_splitter); m_layout->setCurrentWidget(m_splitter); } else { UAVGadgetView *childView = childSplitterOrView->view(); Q_ASSERT(childView); if (m_view) { if (IUAVGadget *e = childView->gadget()) { childView->removeGadget(); m_view->setGadget(e); } m_uavGadgetManager->emptyView(childView); } else { m_view = childSplitterOrView->takeView(); m_layout->addWidget(m_view); } m_layout->setCurrentWidget(m_view); } delete oldSplitter; m_uavGadgetManager->setCurrentGadget(findFirstView()->gadget()); }
EditorView *EditorView::findNextView() { SplitterOrView *current = parentSplitterOrView(); QTC_ASSERT(current, return this); SplitterOrView *parent = current->findParentSplitter(); while (parent) { QSplitter *splitter = parent->splitter(); QTC_ASSERT(splitter, return this); QTC_ASSERT(splitter->count() == 2, return this); // is current the first child? then the next view is the first one in current's sibling if (splitter->widget(0) == current) { SplitterOrView *second = qobject_cast<SplitterOrView *>(splitter->widget(1)); QTC_ASSERT(second, return this); return second->findFirstView(); } // otherwise go up the hierarchy current = parent; parent = current->findParentSplitter(); }