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;
    }
}
Example #2
0
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;
    }
}