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;
    }
}
Example #3
0
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());
}
Example #4
0
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();
    }